里面在我的ListFragment
我有这样的:更新一个列表视图片段
private SelectedItemListAdapter selectedItemListAdapter;
public void initSelectedItemListAdapter(CellItem[] itemList)
{
selectedItemListAdapter = new SelectedItemListAdapter(getSherlockActivity(), R.layout.listview_item_selecteditem, itemList);
setListAdapter(selectedItemListAdapter);
}
调用此方法可以让我在我的ListView
但一切设定的数据我试图更新这个数据到目前为止失败。我设法实现它的唯一方法是创建一个SelectedItemListAdapter
的新实例,我认为它不是非常有效。
的尝试我想是使用:
public void updateSelectedItemListAdapter(CellItem[] newList)
{
selectedItemListAdapter.clear();
for(int i = 0; i < newList.length; i++)
selectedItemListAdapter.add(newList[i]);
setListAdapter(selectedItemListAdapter);
selectedItemListAdapter.notifyDataSetChanged();
}
但是这给了我一个java.lang.UnsupportedOperationException
。我也读过关于在主线程上运行这个,但它给了我同样的例外。
我也注意到,如果newList
有不同的计数,我得到java.util.ArrayList.throwIndexOutOfBoundsException
,这表明我错过了一些东西来刷新数据源。
按照要求,这里是我的SelectedItemListAdapter
:
public class SelectedItemListAdapter extends ArrayAdapter<CellItem>
{
Context context;
int layoutResourceId;
CellItem data[] = null;
private static final int ROW_ITEM = 0;
private static final int ROW_VIEWTYPE_COUNT = 1;
class CellItemHolder
{
LinearLayout rootLayout;
TextView itemName;
TextView itemValue;
}
public SelectedItemListAdapter(Context context, int layoutResourceId, CellItem[] data)
{
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
CellItemHolder holder = null;
CellItem item = getItem(position);
if(row == null)
{
holder = new CellItemHolder();
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder.rootLayout = (LinearLayout)row.findViewById(R.id.itemlist_rootLayout);
holder.itemName = (TextView)row.findViewById(R.id.selectedItem_name);
holder.itemValue = (TextView)row.findViewById(R.id.selectedItem_value);
row.setClickable(true);
row.setTag(holder);
}
else
{
holder = (CellItemHolder)row.getTag();
}
holder.itemName.setText(item.itemName);
holder.itemValue.setText(item.itemValue);
holder.rootLayout.setBackgroundColor(Color.WHITE);
return row;
}
@Override
public int getCount()
{
return data.length;
}
@Override
public int getViewTypeCount()
{
return ROW_VIEWTYPE_COUNT;
}
@Override
public int getItemViewType(int position)
{
return ROW_ITEM;
}
}
没有人有任何想法,我怎么可以更新我的列表适配器?
不要犹豫,也为您的适配器添加代码。 – Luksprog 2013-02-28 15:44:10
我刚刚添加了! – 2013-02-28 15:51:20
SelectedItemListAdapter的add方法在哪里? – Luciano 2013-02-28 16:02:56