0

クラスからメソッド startActivityForResult(..) を呼び出す方法があれば、ArrayAdapter を拡張しますか?

ありがとう。

編集:ARRAYADAPTERの追加コード:

MyAdapter クラスのコードがあります:

public class MyAdapter extends ArrayAdapter {

public static final String bundle_text = "some_text";

public MyAdapter(Context context, int textViewResourceId, List<MyAdapterItem> data) {
    super(context, textViewResourceId, data);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;

    // ...

    row.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            Intent intent = new Intent(getContext(), MyNewActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            int id = 1;

            Bundle bundle = new Bundle();
            bundle.putLong(MyAdapter.bundle_text, id);

            intent.putExtras(bundle);
            getContext().startActivity(intent);
        }
    });

    return super.getView(position, convertView, parent);
}

}

すべて動作しますが、ArrayAdapter クラスから startActivityForResult を呼び出すことはできず、startActivty のみを呼び出すことができます。しかし、MyNewActivity が終了したら、リストビューを更新したいのですが、startActivityForResult を呼び出すことができない場合、その方法がわかりません。

4

1 に答える 1

1

これはよくある誤解です (古いスレッドと同様に、概要だけ説明します)

  1. アダプターは、データをリスト ビューにするためだけのものです。行の getView のようにビューを返しますが、実際には GUI イベントを処理しません。これらはアクティビティで行われます。実際、アダプターがインターネットまたはデータベースから多くの行をロードしている場合、UI スレッドの外で実行する必要があります。

  2. 活動はイベントのためのものです。クリック リスナーをアクティビティ内のリストビューにアタッチします。次に、詳細編集アクティビティなどの呼び出しに問題はありません。すべて UI スレッド上にあります。したがって、UI スレッドからアクティビティを開始しても問題ありません。

  3. アダプターのアップデートの問題!詳細アクティビティから戻ると、アダプタが更新されていないため、リストが更新されていないことがわかります。これを行うには、RESULT の詳細アクティビティを開始します。詳細な「フォーム」をアダプタのものでごちゃごちゃにしないでください。実際、詳細レコードで作成または編集された POJO を返すことを選択でき、データベースをまったく気にしません。

  4. アクティビティで onActivityResult() をリッスンし、アダプター (アプリに SQLite がある場合はデータベース バックエンド) に挿入し、リスト ビューのデータが変更されたことを通知します。リスト ビューが自動的に更新されます。

リストビューがリロードされると、パフォーマンスが問題になる可能性があります。ほとんどの場合、アダプタに追加することで回避でき、リスト ビュー データが変更されたことを通知するだけです。データ表示は「増分」であるため、表示されている行 1 ~ 5 の行 3 を編集した可能性があります。次に、リスト ビューはそれらの 1 ~ 5 行の表示位置のみを更新します。しかし、1つだけが変更されたときに500行をリロードすると、パフォーマンスの問題が発生する可能性があります:)

于 2015-01-06T02:12:00.893 に答える