1

我有两个活动,每个活动都包含一个列表视图。我已经通过customAdapter成功填充了第一个listview。第二个列表视图(在第二个活动中)具有几乎相同的布局(只有没有imageView)。现在我的问题是,我是否需要为第二个listview创建另一个customAdapter,或者有两种方法可以将一个customAdapter用于两个listviews。两个ListView(具有不同的布局)只能与一个customAdapter一起使用?可能吗?

P.S 我不想在第二列表视图显示ImageView的

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; 
    } 
} 

回答

1

那么,尝试在构造函数中使用的适配器的标志。如果标志值为true,则显示imageview,否则将imageview可见性设置为“不存在”。因此,在第一个活动中,您将传递值为true的适配器构造函数,而在第二个活动中,您将传递false。

+0

您的回复非常有帮助和快速。谢谢 – benbas1982

1

如果我正确理解你的问题,你有2个布局文件2列表视图。 ListView1 - R.layout.layout_1和ListView2 - R.layout.layout_2。

你可以做的是在MyAdapter的构造函数中传递你的活动的布局文件。像这样

Activity1: 
MyAdapter adapter = new MyAdapter(this,your_2d_stringArray,R.layout.layout_1) 

Activity2: 
MyAdapter adapter = new MyAdapter(this,your_2d_stringArray,R.layout.layout_2) 

Inside MyAdapter class 

Create a variable: int layout; 

Inside the constructor add the third assignment after context and array 

MyAdapter(Context context,String[][] array, int layout) 
this.layout = layout; 

Now inside your getView method 
LayoutInflater theInflater = LayoutInflater.from(context); 
rowView = theInflater.inflate(layout, parent, false); 

and then just check 

if(layout == R.layout.layout_1) 
    then do this... 
else 
    do that... 

我希望它有帮助。

+0

谢谢你的回复,你很好的理解了我的问题,我也很乐意接受你的回答(尽管Shaon Hasan的回复是相同的概念)。但感谢代码演示。 – benbas1982

相关问题