Java 如何在列表视图的ArrayAdapter中使用多个textview?
我试图在列表行中显示单独的项目。所以我使用4个文本视图。但是我使用arrayadapter来扩展我的类活动。现在我必须根据textview将字符串列表放在一行中。如何做到这一点?非常感谢您提供的任何帮助…在这种情况下,我通常会扩展ArrayAdapter。通常,您只需要覆盖适配器中的两个函数-getView和一个构造函数 适配器的代码如下所示:Java 如何在列表视图的ArrayAdapter中使用多个textview?,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,我试图在列表行中显示单独的项目。所以我使用4个文本视图。但是我使用arrayadapter来扩展我的类活动。现在我必须根据textview将字符串列表放在一行中。如何做到这一点?非常感谢您提供的任何帮助…在这种情况下,我通常会扩展ArrayAdapter。通常,您只需要覆盖适配器中的两个函数-getView和一个构造函数 适配器的代码如下所示: /** class to act as list adapter for rows List */ private static class FourT
/** class to act as list adapter for rows List */
private static class FourTextListAdapter extends ArrayAdapter<MyDataClass> {
/** To cache views of item */
private static class ViewHolder {
private TextView text1;
private TextView text2;
private TextView text3;
private TextView text4;
/**
* General constructor
*/
ViewHolder() {
// nothing to do here
}
}
/** Inflater for list items */
private final LayoutInflater inflater;
/**
* General constructor
*
* @param context
* @param resource
* @param textViewResourceId
* @param objects
*/
public FourTextListAdapter(final Context context,
final int resource,
final int textViewResourceId,
final List<User> objects) {
super(context, resource, textViewResourceId, objects);
this.inflater = LayoutInflater.from(context);
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
View itemView = convertView;
ViewHolder holder = null;
final MyDataClass item = getItem(position);
if(null == itemView) {
itemView = this.inflater.inflate(R.layout.four_texts_item, parent, false);
holder = new ViewHolder();
holder.text1 = (TextView)itemView.findViewById(R.id.text1);
holder.text2 = (TextView)itemView.findViewById(R.id.text2);
holder.text3 = (TextView)itemView.findViewById(R.id.text3);
holder.text4 = (TextView)itemView.findViewById(R.id.text4);
itemView.setTag(holder);
} else {
holder = (ViewHolder)itemView.getTag();
}
holder.text1.setText(item.getText1());
holder.text2.setText(item.getText2());
holder.text3.setText(item.getText3());
holder.text4.setText(item.getText4());
return itemView;
}
}
在这种情况下,我通常会扩展ArrayAdapter。通常,您只需要覆盖适配器中的两个函数-getView和一个构造函数
适配器的代码如下所示:
/** class to act as list adapter for rows List */
private static class FourTextListAdapter extends ArrayAdapter<MyDataClass> {
/** To cache views of item */
private static class ViewHolder {
private TextView text1;
private TextView text2;
private TextView text3;
private TextView text4;
/**
* General constructor
*/
ViewHolder() {
// nothing to do here
}
}
/** Inflater for list items */
private final LayoutInflater inflater;
/**
* General constructor
*
* @param context
* @param resource
* @param textViewResourceId
* @param objects
*/
public FourTextListAdapter(final Context context,
final int resource,
final int textViewResourceId,
final List<User> objects) {
super(context, resource, textViewResourceId, objects);
this.inflater = LayoutInflater.from(context);
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
View itemView = convertView;
ViewHolder holder = null;
final MyDataClass item = getItem(position);
if(null == itemView) {
itemView = this.inflater.inflate(R.layout.four_texts_item, parent, false);
holder = new ViewHolder();
holder.text1 = (TextView)itemView.findViewById(R.id.text1);
holder.text2 = (TextView)itemView.findViewById(R.id.text2);
holder.text3 = (TextView)itemView.findViewById(R.id.text3);
holder.text4 = (TextView)itemView.findViewById(R.id.text4);
itemView.setTag(holder);
} else {
holder = (ViewHolder)itemView.getTag();
}
holder.text1.setText(item.getText1());
holder.text2.setText(item.getText2());
holder.text3.setText(item.getText3());
holder.text4.setText(item.getText4());
return itemView;
}
}
尝试使用SimpleAdapter而不是ArrayAdapter
ArrayList<HashMap<String, String>> sampleArrayList;
SimpleAdapter sampleListAdapter;
HashMap<String, String> sampleObjectMap;
for (SampleObject sampleObj : sampleList) {
sampleObjectMap= new HashMap<String, String>();
sampleObjectMap.put("value1", sampleObj.getValue1());
sampleObjectMap.put("value2", sampleObj.getValue2());
sampleObjectMap.put("value3", sampleObj.getValue3());
sampleObjectMap.put("value4", sampleObj.getValue4());
sampleArrayList.add(sampleObjectMap);
}
sampleListAdapter= new SimpleAdapter(
context, sampleArrayList,
R.layout.custom_list_layout, new String[] {
"value1", "value2" , "value3", "value4"},
new int[] { R.id.list_content_column1,
R.id.list_content_column2,
R.id.list_content_column3,
R.id.list_content_column4});
sampleListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<String, String> sampleObjectMapLocal = sampleArrayList
.get(position);
final String value1Obj = sampleObjectMapLocal .get("value1");
System.out.println("value1Obj : " + value1Obj);
}
});
在上面的代码中,使用ArrayList sampleArrayList填充listView内容
因此,可以使用键value1、value2、value3、value4访问任意列中的项目
希望这会有所帮助。请尝试使用SimpleAdapter代替ArrayAdapter
ArrayList<HashMap<String, String>> sampleArrayList;
SimpleAdapter sampleListAdapter;
HashMap<String, String> sampleObjectMap;
for (SampleObject sampleObj : sampleList) {
sampleObjectMap= new HashMap<String, String>();
sampleObjectMap.put("value1", sampleObj.getValue1());
sampleObjectMap.put("value2", sampleObj.getValue2());
sampleObjectMap.put("value3", sampleObj.getValue3());
sampleObjectMap.put("value4", sampleObj.getValue4());
sampleArrayList.add(sampleObjectMap);
}
sampleListAdapter= new SimpleAdapter(
context, sampleArrayList,
R.layout.custom_list_layout, new String[] {
"value1", "value2" , "value3", "value4"},
new int[] { R.id.list_content_column1,
R.id.list_content_column2,
R.id.list_content_column3,
R.id.list_content_column4});
sampleListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<String, String> sampleObjectMapLocal = sampleArrayList
.get(position);
final String value1Obj = sampleObjectMapLocal .get("value1");
System.out.println("value1Obj : " + value1Obj);
}
});
在上面的代码中,使用ArrayList sampleArrayList填充listView内容
因此,可以使用键value1、value2、value3、value4访问任意列中的项目
希望这会有所帮助。+1同意这一点,您也可以扩展BaseAdapter。在我的情况下,在BaseAdapter和ArrayAdapter之间选择哪一个?+1同意这一点,您也可以扩展BaseAdapter。在我的情况下,在BaseAdapter和ArrayAdapter之间选择哪一个