0

)

Android での ListView の使用に関するチュートリアルを見つけました。しかし、それについて質問があります。ここでチュートリアル:

http://www.vogella.com/articles/AndroidListView/article.html#listadvanced_interactive

セクション 13.2 までスクロールする必要があります。

チュートリアルの考え方は、一方では ListView (各項目にチェックボックスがある) を持ち、他方では ArrayList を持ちます (ArrayList の項目はオブジェクトであり、ArrayList の項目に表示される情報を含みます)。 ListView、例えば CheckBox がチェックされているかどうか、テキストなど)。アダプターは、両方を等しく保つ必要があります。ArrayList を変更すると、ListView も変更されます。

しかし今、私の質問です。ユーザーがリストの 1 つの項目に触れると、アダプターはメソッド「onCheckedChanged」を呼び出します。しかし、そこで何が起こるでしょうか?そこにオブジェクトが作成され、CheckBox からタグが取得されます。Ok。これでメソッドは完了です。ガベージ コレクターはオブジェクトを破棄しますか? アクティビティでそこからこの情報が必要になるのはいつですか。リストの下に「削除」ボタンがあるとします。したがって、これらの情報をアダプターのリスナーからアクティビティに転送する必要があります。すべてのクラスで正しい情報を持つ同じ ArrayList を確実に使用するにはどうすればよいですか?

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
          Model element = (Model) viewHolder.checkbox
              .getTag();
          element.setSelected(buttonView.isChecked());

        }

私が何を意味するか知っていることを願っています。説明してもらえますか?

言語については申し訳ありませんが、英語は私の母国語ではありません。

さよなら

4

2 に答える 2

0

あなたの質問を理解しているかどうかは完全にはわかりません。そこには開梱するものがたくさんありますが、試してみます。ListView何が起こっているのかを理解するには、と に含まれるそれを裏付けるデータとの関係を理解する必要がありますListAdapter

ListView含まれるデータが表示されますListAdapter。はListAdapter他のソースからデータを取得します。この場合は、ArrayList参照している です。ArrayListを使用する理由 チュートリアルでは、例が文字列として書き出される固定データ セット (オペレーティング システムのリストなど) を使用しているため、完全には明確ではありません。ただし、実際には、ユーザーや場所などのリストのような動的リストを使用することがよくあります。

ArrayList、最終的に表示されるオブジェクトを保持します。これは、チュートリアルの「モデル」クラスです。場所のリストなど、他のクラスのデータにも同じことが当てはまります。場所をクラスとして想像すると、そのクラスには場所を説明するフィールド (住所、説明、その他の固有の機能など) が含まれます。ある場所からデータがダウンロードされると、場所ごとに場所の新しいインスタンスが作成されます。これらのオブジェクトは、ArrayList. ダウンロード プロセスが終了したら、最終的に を更新できるようArrayListに、そのコンテンツを に渡すプロセスを開始します。ListAdapterListView

常に右を使用することをどのように知っていますArrayListか? あなたArrayListはあなたにリンクされているからですListAdapter。が処理するデータは、ListAdapterモデルまたはユーザーのリストであるかどうかにかかわらず、 によって提供されますArrayList。間違ったものを使用することはできません。についても同様ListAdapterです。リンクされているアダプターを設定する必要があるため、ListView常に正しいソースからプルされます。間違ったデータを使用することはできません。

細心の注意を払うと、リスナーで何が起こっているかとonCheckChangedいうと、ユーザーは実際にはモデル クラスに含まれるフィールドを更新しているだけです。各モデルには isChecked フィールドがあります。チェック ボックスをクリックすると、オブジェクトの値が更新されます。これにより、何がチェックされ、何がチェックされていないかがわかります。

への応答: 「誰もアダプターに「ねえ、それはあなたのソースであるリストに属しています」とは言いませんでした」

ArrayAdapterListViewのドキュメントを見てください

allのコンストラクターは、ArrayAdapterオブジェクトのリストを引数として受け取ります。このリストは、 内に表示されるオブジェクトのリストになりますListView

さらに、引数としてsome を取るListViewを呼び出す必要があります。これは、表示するデータのソースを実際に伝えるものです。setAdapterListAdapterListView

その意味で、ListListAdapter、およびListViewはすべてリンクされています。

于 2013-05-23T14:14:47.570 に答える
0

あなたの質問を理解できれば、回答はあなたが与えたチュートリアルの第14.1章にあります...

削除がチェックされているときに何らかの処理を行いたい場合は、ListView にリスナーを追加します。

これらの機能には通常、クリックされた位置があり、クリックされた位置を知っていれば、何でも実行できます。例えば:

list.setOnItemLongClickListener(new OnItemLongClickListener() {

  @Override
  public boolean onItemLongClick(AdapterView<?> parent, View view,
      int position, long id) {
    Toast.makeText(MyList.this,
        "Item in position " + position + " clicked",
        Toast.LENGTH_LONG).show();
    // Return true to consume the click event. In this case the
    // onListItemClick listener is not called anymore.
    return true;
  }
});
于 2013-05-23T14:03:32.140 に答える