私のListFragment
中にこれがあります:
private SelectedItemListAdapter selectedItemListAdapter;
public void initSelectedItemListAdapter(CellItem[] itemList)
{
selectedItemListAdapter = new SelectedItemListAdapter(getSherlockActivity(), R.layout.listview_item_selecteditem, itemList);
setListAdapter(selectedItemListAdapter);
}
このメソッドを呼び出すと、データを設定できますが、ListView
これまでにこのデータを更新しようとして失敗したことはすべて失敗しました。SelectedItemListAdapter
私がそれを機能させることができた唯一の方法は、あまり効率的ではないと思う新しいインスタンスを作成することです。
私が試した1つの試みは、次を使用することでした。
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;
}
}
リストアダプタを更新する方法について誰かがアイデアを持っていますか?