質問

Android のスピナー項目があり、その行は TextView と ImageView (ユーザーが特定の項目をお気に入りとしてマークしたことを示す星) で構成されています。ここで、ユーザーがアイテムをお気に入りに追加したときに、スピナー リストのそのアイテムの横に星を表示したいので、更新された画像を表示するためにスピナーを再描画したいと思います。どうすればいいでしょうか?

私が今やっていることは、適切な画像を使用してまったく新しいスピナーを作成していることです。これにより、スピナーが選択した項目をリストの最初の項目に設定することになりますが、これは面倒です。同じままにしておきたいのです。私が試してみました

spinner.setSelection(selectedItem);

これは、実際に必要な番号 (現在選択されている項目の位置) 以外の任意の番号に対して機能し、選択したスピナー項目をリストの最初に再度設定します。

それで:リスト全体を再作成せずに、更新された情報でリストを再描画するにはどうすればよいですか。または、リストを再作成してもスピナー項目の選択を保持するにはどうすればよいですか?

明確にするために:これが私がやっていることです

// Callback for "favourite"-button
star.setOnClickListener(new ImageButton.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // Toggle favourite
            getActiveSelection().setStarred(getActiveSelection().isStarred() ? false : true);
            reloadText();
            createSpinner();
        }
    });

 private void createSpinner() {

    spinner = ((Spinner)findViewById(R.id.spinner));

    ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
    HashMap<String, Object> map = new HashMap<String, Object>();

    // Populate spinner item list
    for(int i=0; i<N; i++) {
        SpinnerItem item = getSpinnerItem(i);
        map = new HashMap<String, Object>();
        map.put("Name", item.getName());
        map.put("Icon", (item.isStarred() ? "On" : "Off"));
        list.add(map);
    }        

    MySpinnerAdapter aspn = new MySpinnerAdapter(this, list,
            R.layout.spinner, new String[] { "Name", "Icon" },
            new int[] { R.id.spinnerrow, R.id.spinnerrowicon });


    spinner.setAdapter(aspn);
    spinner.setSelection(getActiveSelection().getSpinnerPosition());
}
役に立ちましたか?

解決

アップデートするだけでもいいかもしれません spinner adapter - ユーザーがスター アイコン (star.setOnClickListener...)。私ならどうするか:

  1. アダプターの構築では、「名前」フィールドのリストのみを渡します。アイコンは必要ありません(デフォルトではすべてにスターが付いていません)。
  2. スター付きアイテムを設定するにはアダプターに別の機能を追加します (setStarred(String name))
  3. 最初の呼び出しで、 setStarred 初期選択を設定します (存在する場合)
  4. 星で。setOnClickListener 実装、呼び出し setStarred として入手したアダプターの星付きアイテムの場合 (MySpinnerAdapter)spinner.getAdapter()

他のヒント

またはただ試してみる:

spinner.setSelection(getActiveSelection().getSpinnerPosition(),true);
.

それは私がスピナーを更新するために働いた...

データが変更されたときにスピナーアダプタのnotifyDataSetChanged()を呼び出す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top