裏面在我的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