根据活动(Android)更改自定义适配器上的布局文件

Posted

技术标签:

【中文标题】根据活动(Android)更改自定义适配器上的布局文件【英文标题】:Changing Layout file on custom adapter depending on activity (Android) 【发布时间】:2021-08-14 04:24:39 【问题描述】:

我想根据正在运行的活动更改使用的布局文件。我有两个需要网格视图的活动,并且两者都非常相似,所以我认为我应该能够使用相同的适配器。唯一需要更改的是布局文件。

这是我的自定义适配器:

package com.example.placesofinterest;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import java.util.ArrayList;

public class GridAdapter extends BaseAdapter 

    private Context context;
    private LayoutInflater inflater;
    private ArrayList<Bitmap> img;

    public GridAdapter(Context c, ArrayList<Bitmap> img)
        this.context = c;
        this.img = img;
    
    @Override
    public int getCount() 
        return img.size();
    

    @Override
    public Object getItem(int position) 
        return img.get(position);
    

    @Override
    public long getItemId(int position) 
        return position;
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
        if (convertView == null) 
            inflater = LayoutInflater.from(context);
            convertView = inflater.inflate(R.layout.places_layout, parent, false);
            MyViewHolder myViewHolder = new MyViewHolder(convertView);
            convertView.setTag(myViewHolder);
        
        MyViewHolder myViewHolder = (MyViewHolder)convertView.getTag();
        myViewHolder.img.setImageBitmap(img.get(position));

        return convertView;
    

    public class MyViewHolder 
        public ImageView img;

        public MyViewHolder(View view) 
            img = view.findViewById(R.id.imageView);
        
    


我在 getView 中考虑是否有任何方法来确定 MainActivity1 正在运行还是 MainActivity2 正在运行,使用它,我可以更改布局文件。

即:

if (convertView == null) 
            inflater = LayoutInflater.from(context);
            if (Activity = MainActivity )
                convertView = inflater.inflate(R.layout.row_layout, parent, false);
            else if (Activity = MainActivity2)
                convertView = inflater.inflate(R.layout.row_layout2, parent, false);
            MyViewHolder myViewHolder = new MyViewHolder(convertView);
            convertView.setTag(myViewHolder);
        

【问题讨论】:

尝试将适配器public GridAdapter(Context c, ArrayList&lt;Bitmap&gt; img)的构造函数改为public GridAdapter(Context c, ArrayList&lt;Bitmap&gt; img, int layout),并将layout保存到全局字段,然后在getView()中,就像`convertView = inflater .inflate(布局,父级,假);' .因此,您可以为同一个适配器传递不同的布局。 【参考方案1】:

你试过吗?

if (context instanceof MainActivity) 
  // some code
 else if (context instanceof MainActivity2)
  // handle service case

我不确定它是否会起作用,但请尝试告诉我:D

【讨论】:

抱歉回复晚了,我还需要修复其他错误,但它有效!谢谢!只需将特定于该 Activity 的所有内容放在这些 if 语句中,它就可以完美运行

以上是关于根据活动(Android)更改自定义适配器上的布局文件的主要内容,如果未能解决你的问题,请参考以下文章

列表项布局未将项目显示为全宽

让自定义列表适配器正确膨胀多个线性布局

Android - 在运行时更改自定义标题视图

Android中的ListView直到我触摸才显示项目

Android 屏幕适配屏幕适配通用解决方案 ④ ( 自定义组件解决方案 | 计算设计稿与实际布局的比例系数 )

Android 屏幕适配屏幕适配通用解决方案 ④ ( 自定义组件解决方案 | 计算设计稿与实际布局的比例系数 )