我想在ListView中显示有两个不同textViews的arrayList项。 我正在使用ListViewCustomAdapter和getView(),getItem()...方法。
这是我的代码: MyCustom.java:
public class MyCustom extends BaseAdapter {
public Activity context;
public LayoutInflater inflater;
ArrayList mylist;
public MyCustom(Activity context,ArrayList viewList) {
super();
this.context=context;
this.mylist=viewList;
inflater=(LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mylist.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View List;
if(convertView==null)
{
List=new View(context);
LayoutInflater mLayoutinflater=(LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
List=mLayoutinflater.inflate(R.layout.listitem_row, parent, false);
}
else
{
List=(View)convertView;
}
TextView t1=(TextView)List.findViewById(R.id.txtViewTitle);
t1.setText((CharSequence) mylist.get(position));
TextView t2=(TextView)List.findViewById(R.id.txtViewDescription);
t2.setText(mylist.get(position).toString());
return List;
}
}
以上代码,存在如下所述的问题。 这将在ListView的两个textview中将arrayList项显示为相同。 例如: MYLIST = [ 'A1', 'A2', 'B1', 'B2'] 这是我的arraylist并传递给MyCustomAdapter。
在运行时,'a1'将同时显示在textviews中。依此类推。
我想在textView1中显示'a1',而'a2'在textView2中显示..而b1是......所以......
我想我可能在getItem(),getItemId(),getcount()方法中遇到问题。 请帮助我...
答案 0 :(得分:2)
从你的问题中可以清楚地看到你要显示[a1,a2,b1,b2,c1,c2 ......] 如
a1a2
b1b2
c1c2
因此您需要将代码更改为以下内容:
@Override
public int getCount() {
// TODO Auto-generated method stub
if(myList.size()%2==0)
return mylist.size()/2;
else
return myList.size()/2+1;
}
和getView方法如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View List;
if(convertView==null)
{
List=new View(context);
LayoutInflater mLayoutinflater=(LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
List=mLayoutinflater.inflate(R.layout.listitem_row, parent, false);
}
else
{
List=(View)convertView;
}
TextView t1=(TextView)List.findViewById(R.id.txtViewTitle);
t1.setText((CharSequence) mylist.get(position*2));
TextView t2=(TextView)List.findViewById(R.id.txtViewDescription);
if(position*2<getCount())
t2.setText(mylist.get(position*2+1).toString());
return List;
}
答案 1 :(得分:0)
你的适配器getview是完美的,但你的逻辑错了.. 我更喜欢用2个字符串制作类对象, 等。
public class MyClass
{
String one;
String two;
}
并将您的列表设为
ArrayList<MyClass> mylist = new ArrayList<MyClass>();
然后像你想要的那样设置文本。
TextView t1=(TextView)List.findViewById(R.id.txtViewTitle);
t1.setText(mylist.get(position).one); //String one= "a1" according to position in mylist
//it will be = "b1" on next position
//no need of casting to CharSequence
TextView t2=(TextView)List.findViewById(R.id.txtViewDescription);
t2.setText(mylist.get(position).two); //String two= "a2"
答案 2 :(得分:0)
在某些适配器方法中有错误的实现。
getItem()应该从列表中的位置返回对象:
@Override
public Object getItem(int position) {
return myList.get(position);
}
然后,在getView
中@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Create view
// ...
String[] item = (String[])getItem(position); // Get the current object at 'position'
// Update your view here
TextView t1=(TextView)List.findViewById(R.id.txtViewTitle);
t1.setText(item[0]);
TextView t2=(TextView)List.findViewById(R.id.txtViewDescription);
t2.setText(item[1]);
}
如果你想显示两个不同的字符串,我建议你的列表应该是这样的
[new String[]{"a1", "a2"}, new String[]{"b1", "b2"}, ...]