0

ボタンを 2 回押したときにリストビュー項目が追加されないようにしようとしています。.Clear() を使用しようとしましたが、どこに配置するか、またはどのように配置するかがわかりません。アイテムが読み込まれなくなったり、アイテムがまったくクリアされなかったりすることがあります。

グローバルなもの:

ArrayAdapter<CharSequence> adapter;
ArrayList<MessageDetails> details;

私のボタン:

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            try
            {
                //Tried clearing adapter first before code runs but items do not even get displayed
                adapter.clear();
                adapter.notifyDataSetChanged();
                //sendPostData calls refreshListView method
                new sendPostData().execute(nric.getText().toString());
            }
            catch (Exception e)
            {

            }
        }

私の refreshListView() メソッド:

private void refreshListView()
{       
    adapter = new ArrayAdapter<CharSequence>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, items);
    myInfoList.setAdapter(adapter);

    details = new ArrayList<MessageDetails>();
    MessageDetails Detail;

    Detail = new MessageDetails();

    for (int i =0; i < itemName.size(); i++)
    {
        float totalprice = itemPrice.get(i) * Quantity.get(i);
        Detail = new MessageDetails();
        Detail.setitemName(itemName.get(i));
        Detail.setItemDescription(description.get(i));
        Detail.setitemPrice(String.valueOf(totalprice));
        Detail.setQuantity(Quantity.get(i).toString() + " sets");
        Detail.setDate(purchaseDate.get(i).toString());
        details.add(Detail);
    }   

    myInfoList.setAdapter(new CustomAdapter(details , getActivity()));
}

編集により、最初のアダプターが削除されました。

グローバル アイテム:

CustomAdapter mCustomAdapter;

リフレッシュリストビュー:

private void refreshListView()
{           
    details = new ArrayList<MessageDetails>();
    MessageDetails Detail;

    Detail = new MessageDetails();

    for (int i =0; i < itemName.size(); i++)
    {
        float totalprice = itemPrice.get(i) * Quantity.get(i);
        Detail = new MessageDetails();
        Detail.setitemName(itemName.get(i));
        Detail.setItemDescription(description.get(i));
        Detail.setitemPrice(String.valueOf(totalprice));
        Detail.setQuantity(Quantity.get(i).toString() + " sets");
        Detail.setDate(purchaseDate.get(i).toString());
        details.add(Detail);
    }   

    mCustomAdapter = new CustomAdapter(details , getActivity());
    myInfoList.setAdapter(mCustomAdapter);
}
4

2 に答える 2

0

Adapter2 つの異なるインスタンスを に送信するListViewと、後者が前者のインスタンスをオーバーライドします。したがって、参照を保持しCustomAdapter、データセットをクリアするメソッドを作成する必要があります。

CustomAdapter mCustomAdpater = new CustomAdapter(details , getActivity()); 
myInfoList.setAdapter(mCustomAdpater); 

CustomAdapter 内で独自のclear()メソッドを記述し、内部でonClick()呼び出します

mCustomAdpater.clear();
于 2013-07-08T09:03:12.110 に答える
0

これは私のために働いた:

        listview.removeAllViewsInLayout();
        listview.removeAllViewsFromAdapter();
        listview.setAdapter(null);
        listview.refreshDrawableState();
        listview.removeViews(0, listview.getChildCount());
于 2013-07-08T09:06:02.377 に答える