0

ListView を備えた Android アプリがあります。すべての行は、SQLIte クエリの結果によって動的に生成されます。ユーザーがアイテムをクリックすると、アプリは、別の SQLite クエリによって生成されたそのアイテムの「コンテンツ」などでリストを更新する必要があります。新しいインテントを作成して同じアクティビティに送信するアクティビティを「更新」しようとしました。アクティビティ名はShopActivityです

ListView list_content = ((ListView)findViewById(R.id.listforshop));
list_content.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              

            // ID and text of selected item
            long selected_id = id;
            String selected_name = (String) ((TextView) view.findViewById(R.id.element)).getText();

            // New intent
            Intent intent = getIntent();
            intent.setClassName(ShopActivity.this, ShopActivity.class.getName());

            // Passing data and refreshing activity
            intent.putExtra("id", selected_id);
            intent.putExtra("name", selected_name);
            intent.putExtra("type", "");
            startActivity(intent);
        }       
});

このように、LogCat は Bundle に関する多くの警告を表示します。アプリがアクティビティを開始できないようです。

ListView を「更新」する別の方法はありますか? この実装は正しいですか?

4

4 に答える 4

1
// New intent
Intent intent = getIntent();
intent.setClassName(ShopActivity.this, ShopActivity.class.getName());

これは新しいインテントを作成しません。これは既存のものを再利用します... このようにインテントを再利用すると、このアクティビティを再開するときに多くの警告と例外がスローされます。新しいインテントを作成するには、キーワードを使用する必要がありますnew

ただし、Activity 全体をリロードする必要はありません。単純に新しい Cursor を取得し、CursorAdapter#swapCursor()ListView を更新するために使用します。

于 2012-11-19T21:42:31.293 に答える
0

更新しようとするときは、アダプターListViewの使用を検討する必要があります。notifyDataSetChanged()このメソッドは、提供されたデータが変更され、リスト ビューを更新する必要があることをアダプターに通知します。

したがって、新しいデータをアダプターに追加してから、このメソッドを呼び出す必要があります。

于 2012-11-19T21:44:45.110 に答える
0

詳細を表示しているように聞こえますが、同じアクティビティを使用して表示しないでください。新しいものを追加し、ShopDetailActivityクリックするとユーザーをそこに誘導します。これにより、ユーザーは元のリストに戻るために押すことができます (さらに、素敵な遷移アニメーションを取得します)。

于 2012-11-19T21:47:52.683 に答える
0

リストと詳細を処理する別の方法は、フラグメントを使用することです。これの利点は、大画面デバイスでリストと詳細の両方を同時に表示できることです。

1 つのアクティビティを使用してリストと詳細の両方を表示するのは面倒です。少なくとも、2 つのアクティビティを使用します。

于 2012-11-19T23:13:51.867 に答える