4

ListView アダプターにデータがない場合は、更新ボタンと TextView を表示したいと考えています。また、リストをリロードするボタンにクリック リスナーを追加できるようにしたいと考えています。現在のアクティビティを定義する方法は次のとおりです。

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.foods);

    arrList=new ArrayList<FoodsData>();

    listView=(ListView)findViewById(R.id.list_foods);

    this.listView.setEmptyView(findViewById(R.id.emptyView));

    .....
    .....
}

これが私のxmlファイルです:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
<LinearLayout 
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:orientation="vertical"
    android:layout_centerInParent="true"
    android:id="@+id/emptyView">
    <TextView
        android:layout_width="wrap_content"
        android:textColor="@android:color/white"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:text="Click Refresh to load data"/>
   <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn_retry"
        android:textColor="@android:color/white"
        android:background="@drawable/orange_button_selecter"
        android:layout_gravity="center"
        android:textSize="25sp"
        android:text="@string/retry"/>
</LinearLayout>
<ListView 
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:dividerHeight="2dp"
    android:id="@+id/list_foods"/>

更新ボタンのクリック リスナーをどこに設定しますか?

4

4 に答える 4

10

xml を次のように変更します。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    android:layout_height="fill_parent">
    <FrameLayout 
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:layout_centerInParent="true"
        android:id="@+id/emptyView">
        <TextView
            android:layout_width="wrap_content"
            android:textColor="@android:color/white"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="Click Refresh to load data"/>
       <Button 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btn_retry"
            android:textColor="@android:color/white"
            android:background="@drawable/orange_button_selecter"
            android:layout_gravity="center"
            android:textSize="25sp"
            android:text="@string/retry"/>
    </FrameLayout>
<ListView 
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:dividerHeight="2dp"
    android:id="@+id/list_foods"/>
</RelativeLayout>

その行をJavaに入れます

    View empty = findViewById(R.id.emptyView);
    btn_retry=(Button)empty.findViewById(R.id.btn_retry);
    listView.setEmptyView(empty);

onClickListener() は、同じ xml レイアウトに属しているため、同じ Activity に記述できるようになりました。

btn_retry.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //Do the refresh thing or verify with Toast.
            }
        });

ここで、リストビューが空の場合、ボタンの更新が表示されます。それ以外の場合は、塗りつぶされたリストが表示されます。

于 2013-04-22T11:09:44.227 に答える
0

私の知る限り、アダプターをクリアして、notifyDataSetChanged() をアダプターに設定する必要はありません。項目または配列に List,ArrayList を使用しました。最初にクリアしてから再初期化し、コスチュームアダプターにデータを渡した後、使用されている配列/リストをクリアします。うまくいきます!

于 2014-12-04T02:50:09.217 に答える
0

最初に Adapter を ListView に設定する必要があります。次に、listView コンテンツを更新する必要がある場合は、次を使用します: adapter.notifyDataSetChanged();

すべてのアイテムを削除する必要がある場合:

adapter.clear();
adapter.notifyDataSetChanged();

例えば ​​:

    String[] items = new String[] { "Item1", "Item2", "Item3", "Item4" };
    final ListView listView = (ListView)findViewById(R.id.listView1);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, android.R.id.text1, items);
    listView.setAdapter(adapter);

    Button refreshButton = (Button)findViewById(R.id.button1);
    refreshButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
           ArrayAdapter<String> adapter = (ArrayAdapter<String>)listview.getAdapter();
           if(adapter!= null)
              {
                  adapter.clear();
                  adapter.notifyDataSetChanged();
                 //here you can write your listView.setEmptyView(findViewById(R.id.emptyView)); code
              }
    });
于 2013-04-22T10:26:47.053 に答える