web-dev-qa-db-ja.com

リストビューのコンテンツをクリアしますか?

ListViewに少し問題があります。 ListViewコンテンツを消去し、カスタムアダプターがあることを知るにはどうすればよいですか?

edit-カスタムアダプタークラスはBaseAdapterを拡張し、次のようになります。

import Android.app.Activity;
import Android.content.Context;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.BaseAdapter;
import Android.widget.TextView;

public class MyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] data;
    private static LayoutInflater inflater = null;

    public MyAdapter(Activity a, String[] str) {
        activity = a;
        data = str;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public static class ViewHolder {
        public TextView text;
    }

    @Override
    public int getCount() {
        return data.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        View v = view;
        ViewHolder holder;
        if (v == null) {
            v = inflater.inflate(R.layout.rowa, null);
            holder = new ViewHolder();
            holder.text= v.findViewById(R.id.dexter);
            v.setTag(holder);
        } else {
            holder = v.getTag();
        }

        holder.text.setText(data[position]);

        return v;
    }

}
73
Mohamed Gallah

単純に書き込む

listView.setAdapter(null);
192
mikepenz

アダプタにリストまたは配列を渡したと思います。この追加されたコレクションのインスタンスを保持する場合、次を実行できます。

collection.clear();
listview.getAdapter().notifyDataSetChanged();

これは、collectionでアダプターをインスタンス化し、それが同じインスタンスである場合にのみ機能します。

また、拡張したアダプタによっては、これができない場合があります。 SimpleAdapterは静的データに使用されるため、作成後に更新することはできません。

PS。すべてのアダプタにclear()メソッドがあるわけではありません。 ArrayAdapterは行いますが、ListAdapterまたはSimpleAdapterしない

53
Maragues

それは簡単です。まず、コレクションをクリアし、次のコードのようなリストをクリアした後、

 yourCollection.clear();
 setListAdapter(null);
7
zheek

AndroidバージョンMおよびNの時点で、次のように機能し、正しいアプローチになります。 ListViewを空にするか、Adapterをnullに設定するのは適切な方法ではなく、nullポインターの問題、無効なListView、アプリのクラッシュを引き起こす可能性があります。

単純に:

    mList.clear();
    mAdapter.notifyDataSetChanged();

つまり、最初にリストを完全にクリアしてから、アダプターにこの変更を知らせます。 Androidは、空のリストでUIを正しく更新します。私の場合、リストはArrayListです。

別のスレッドからこの操作を行う場合、UIスレッドで次のコードを実行します。

    runOnUiThread(mRunnable);

MRunnableは次のとおりです。

    Runnable mRunnable = new Runnable() {
        public void run() {
            mList.clear();
            mAdapter.notifyDataSetChanged();
        }
    };;
3
zeeshan

簡単に動作します:)

YourArrayList_Object.clear();
1
Agilanbu

メソッドにコードListView.Items.Clear();を追加するだけです

0
Charles

リストビューの重複エントリの解決策があります。アクティビティでonBackPress()-メソッドを宣言し、以下に示すハイライトコードを書き留める必要があります。

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    **

    attendence_webdata.clear(); list.setAdapter(null);
    --------------------------------------------------

    **
 }
0
Arpit Patel

カスタムアダプターからアイテムを削除し、 notifyDataSetChanged() を呼び出します。

0
mreichelt