Search code examples
androidlistviewandroid-listviewandroid-arrayadapterbaseadapter

Two Listview(with different layout) can be used with only one customAdapter? is it possible?


I have two activities which each contains a list view. I have successfully populated first listview via a customAdapter. The second list view (in second activity) has an almost identical layout (only without imageView) . Now my question is do I need to create another customAdapter for second listview or there is a way to use one customAdapter for both listviews .

p.s I do not want to display the imageView in second listview

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

class MyAdapter extends BaseAdapter {
    private final Context context;
    private final String[][] strArray2d;


    public MyAdapter(Context context, String[][] Array2d) {
        this.context = context;
        this.strArray2d = Array2d;

    }

    @Override
    public int getCount() {
        return strArray2d.length;
    }

    @Override
    public Object getItem(int position) {
        return strArray2d[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        String[] strInnerArray = strArray2d[position]; // Extract innerArray[] from two dimensional strArray2d[][]
        View rowView;

        if (convertView == null) { // if it's not recycled, initialize some attributes
            LayoutInflater theInflater = LayoutInflater.from(context);
            rowView = theInflater.inflate(R.layout.row_layout, parent, false);
        } else {
            rowView = convertView;
        }

        ImageView star = (ImageView) rowView.findViewById(R.id.star);
        TextView Id = (TextView) rowView.findViewById(R.id.RowId);
        TextView BNBNumber = (TextView) rowView.findViewById(R.id.RowBNBnumber);
        TextView title = (TextView) rowView.findViewById(R.id.RowTitle);
        int isFavorite = Integer.parseInt(strInnerArray[3]);

        if (isFavorite == 1) {
            star.setImageResource(R.drawable.tick);
        }

        Id.setText(strInnerArray[0]);
        BNBNumber.setText(strInnerArray[2]);
        title.setText(strInnerArray[1]);

        return rowView;
    }
}

Solution

  • Well, try using a flag in your constructor for adapter. If the flag value is true than show the imageview otherwise set imageview visibility to "gone".

    SO, in first activity you will be passing value true to adapter constructor and in second activity you will pass false.