两个 Listview(具有不同布局)只能与一个 customAdapter 一起使用吗?可能吗?
Two Listview(with different layout) can be used with only one customAdapter? is it possible?
我有两个活动,每个活动都包含一个列表视图。我已经通过 customAdapter 成功填充了第一个列表视图。第二个列表视图(在第二个 activity 中)具有几乎相同的布局(只是没有 imageView)。现在我的问题是我是否需要为第二个 listview 创建另一个 customAdapter 或者有一种方法可以为两个 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;
}
}
好吧,尝试在适配器的构造函数中使用标志。如果标志值为 true 则显示 imageview 否则将 imageview 可见性设置为 "gone".
所以,在第一个 activity 中,您将向适配器构造函数传递值 true,在第二个 activity 中,您将传递 false。
如果我对你的问题的理解正确,你有 2 个列表视图的 2 个布局文件。 ListView1 - R.layout.layout_1 和 ListView2 - R.layout.layout_2.
你可以做的是在 MyAdapter 的构造函数中传递来自 activity 的布局文件。像这样
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...
希望对您有所帮助。
我有两个活动,每个活动都包含一个列表视图。我已经通过 customAdapter 成功填充了第一个列表视图。第二个列表视图(在第二个 activity 中)具有几乎相同的布局(只是没有 imageView)。现在我的问题是我是否需要为第二个 listview 创建另一个 customAdapter 或者有一种方法可以为两个 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;
}
}
好吧,尝试在适配器的构造函数中使用标志。如果标志值为 true 则显示 imageview 否则将 imageview 可见性设置为 "gone".
所以,在第一个 activity 中,您将向适配器构造函数传递值 true,在第二个 activity 中,您将传递 false。
如果我对你的问题的理解正确,你有 2 个列表视图的 2 个布局文件。 ListView1 - R.layout.layout_1 和 ListView2 - R.layout.layout_2.
你可以做的是在 MyAdapter 的构造函数中传递来自 activity 的布局文件。像这样
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...
希望对您有所帮助。