3

Strings.で水平に表示していた単純な配列がListViewありArrayAdapterます。私がやろうとしているのは、ユーザーがからアイテムを選択したときに、ListViewそのアイテムをクリックできないようにし、そのアイテムの背景色を変更することです。おそらく、「グレーアウト」した外観のようです。カスタムを作成してメソッドAdapterをオーバーライドすることを検討していましたisEnabled(int position)が、どうすればよいかわかりません。アドバイス、提案、またはヘルプをいただければ幸いです。

4

4 に答える 4

9

カスタム アダプターを作成してisEnabled(int position)メソッドをオーバーライドすることを検討していましたが、どうすればよいかわかりません。

これは非常に簡単です。SparseBooleanArray を使用して有効な項目を効率的に追跡することをお勧めします。

public class MyAdapter extends ArrayAdapter<String> {
    private SparseBooleanArray enabledItems = new SparseBooleanArray(); 

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

    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }

    @Override
    public boolean isEnabled(int position) {
        return enabledItems.get(position, true);
    }

    public void toggleItem(int position) {
        boolean state = enabledItems.get(position, true);
        enabledItems.put(position, !state);
    }
}

Eclipse の AutoComplete 機能は必要な作業を行いましたが、ここにいくつかの簡単なメモを示します。

  • areAllItemsEnabled()とともにオーバーライドする必要がありますisEnabled()
  • 電話するだけtoggle()で使えるように設計されていますonItemClickListener()adapter.toggle(position)
  • 行の外観を変更したい場合 (デフォルトでの有効化と無効化よりも多くの変更) は、単純にオーバーライドしますgetView()。両方のケースをカバーすることを忘れないでください:

    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = super.getView(position, convertView, parent);
    
        if(!isEnabled(position)) { 
            /* change to disabled appearance */ 
        } 
        else { 
            /* restore default appearance */ 
        }
        return convertView;
    }
    

    それが役立つことを願っています!

于 2013-04-08T18:22:36.220 に答える
0

使用setEnabled(bool)プロパティ:

yourlistview.setEnabled(false);
于 2013-04-08T18:13:54.657 に答える