5

各アイテムにID番号(位置番号とは異なります)を付けたいListViewがあります。setTag()これらのビューの作成時に使用して、ListViewの各ビューアイテムにタグを設定することで、これが可能になることを期待していました。

現在、次のようにListViewを作成しています。

    final ListView listview = (ListView) findViewById(R.id.listView1);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, names);
    listview.setAdapter(adapter);

上記namesのArrayAdapterパラメーターの変数はArrayListであり、このリストの各文字列値にも、この文字列に何らかの方法でリンクしたい一意のIDがあります。

タグを使用して各ビューにアクセスして変更する方法はありますか?ArrayAdapterの独自の拡張クラスを作成し、getView()メソッドをオーバーライドするというアイデアがありましたが、それがどのように機能し、どのようにこれを実行するのかがよくわかりません。

または、私がやろうとしているようにタグを追加するよりも、このようにIDを各文字列にリンクするためのより良い方法はありますか?

4

4 に答える 4

4

を作成し、必要なものが入力さViewBinderれているときにタグを設定しますListView。ビューのすべてのプロパティをチェックして、どのタグがどこに配置されるかを判断できるため、これが探しているものになります。

myAdapter.setViewBinder(new MyViewBinder());

public class MyViewBinder implements ViewBinder {
    @Override
    public boolean setViewValue(View view, Object data, String text){
        //Since it iterates through all the views of the item, change accordingly 
        if(view instanceof TextView){ 
            ((TextView)view).setTag("whatever you want");
        }
    }
}

昨日、別の質問(わずかに異なりますが)でこれとまったく同じ回答を使用しました。

于 2012-05-17T22:08:28.773 に答える
1

getViewについては、ビューをリサイクルする方法を使用して機能します。簡単に説明しようと思います。

表示できるアイテムがたくさんあるとします。大量のビューを作成する必要はありません。これは、大量のメモリを消費するためです。グーグルはそれを考え、特定の時間に表示する必要があるビューのみを更新する手段を提供します。

したがって、リストビューに空のスペースがある場合は、新しいビューで埋められます。ユーザーがスクロールすると、非表示になったビューが再利用され、getViewで返され、代わりに表示されているビューのデータで更新されます。

たとえば、下にスクロールすると、上部のビューはエンドユーザーに対して非表示になりますが、実際には、下部にあるのとまったく同じビューになります。

リストビューのパフォーマンスを最高にする方法を理解し、実際にどのように、そしてなぜそれが機能するのかを理解するには、次のビデオをご覧ください: http ://www.youtube.com/watch?v=wDBM6wVEO70

タグに関しては、getViewを介して位置を取得するため、データ自体(通常はarrayListなどのある種のコレクション)が更新先をすでに認識しているため、何か別のことをしたいと思います。特定のビューを更新する場合は、更新を続けるハッシュマップを使用して更新できる場合があります。このハッシュマップのキーはコレクション内の位置であり、値は関連付けられたビューです。getViewに移動するたびに、ビューに属するエントリ(存在する場合)を削除し、取得/作成したビューに新しい位置を割り当てる必要があります。

于 2012-05-17T22:50:40.513 に答える
0

答えてくれてありがとう。thisMayhemの答えは、最終的にはおそらく簡単だったでしょうが、もっと学ぶために、このチュートリアルに従って自分のアダプターを作成することになりました。名前とIDをアダプターに渡し、名前をTextViewsのテキストとして設定し、IDをタグとして設定します。

于 2012-05-18T19:02:53.053 に答える
0

私はむしろこのスレッドで議論された解決策に行きたいです。すべての関連データを同じ場所に配置するのが常に最も簡単です。この場合、すべてのアイテムに必要なすべての情報を保持するクラスを作成するだけです。

于 2013-02-24T15:53:44.440 に答える