1

ListViewが呼び出されたときに更新されないようですがnotifyDataSetChanged();、アダプタが再度設定されたときに更新されます。

アクティビティでは、自分とアダプタonCreateを初期化します。ListView次にHanler、毎秒新しい値をチェックするこれがあります。listview.setAdapter(arrayAdapter);動作しますが、arrayAdapter.notifyDataSetChanged();何もしません。

コードは次のとおりです。

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

                     lv = (ListView) findViewById(R.id.listView1);

            arrayAdapter = new ArrayAdapter<Integer>(this,android.R.layout. simple_list_item_1, myIntegers);
            lv.setAdapter(arrayAdapter);
    }

    private Handler handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                if (msg.what == DIS){
                    handler.sendEmptyMessageDelayed(DIS, 1000);
                    if(!refresh()){
                        handler.removeMessages(DIS);
                    }
                }
            }
        };

   public boolean refresh(){

        if(ports.isEmpty()){
            return false;
        }else{
            listview.setAdapter(arrayAdapter); //WORKS
    arrayAdapter.notifyDataSetChanged(); // DOESN'T WORK
            return true;
            }
    }

それで、それをどのように機能させるのか疑問に思っていましたnotifyDataSetChanged。なぜなら、それが正しい方法であると読んだからです。とにかく、それが機能してもsetAdapter、更新するたびにリストビューが最初にジャンプします。

編集:

明確にするために、myIntegersにさらに値を追加しています。

4

1 に答える 1

5

代わりに、adapter.add()メソッドを使用して値を追加してみてください。アダプターの作成に使用された配列を変更して、ビューを更新するための更新されたインスタンスを保持することを期待できるとは思いません。幸運を祈ります!

于 2012-08-13T23:07:28.043 に答える