9

同じ問題を数回投稿しましたが、まだ解決されていません。がありListFragment、リストで選択した項目を強調表示したいと考えています。「セレクター」を使用するよう提案されました。このセレクターの使い方がわかりません。私ListFragmentのクラスは:

// Create an adapter with list of stores and populate the list with
        // values
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, StoreList);
        setListAdapter(adapter);
        mDbHelper.close();
    }

    /*
     * (non-Javadoc)
     * 
     * Handles the event when an item is clicked on left pane, performs action
     * based on the selection in left pane
     *  
     * @see android.app.ListFragment#onListItemClick(android.widget.ListView,
     * android.view.View, int, long)
     */
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        String selectedStore = (String) getListAdapter().getItem(position);
        DetailFragment fragment = (DetailFragment) getFragmentManager()
                .findFragmentById(R.id.detailFragment);
        if (fragment != null && fragment.isInLayout()) {
            v.setBackgroundColor(getResources().getColor(R.color.BLUE));
            // passes selectedStore to detail fragment  
            fragment.setText(selectedStore);

            // getItemList(selectedStore);

        }

setBackground を使用すると色が永続的に設定されますが、別のアイテムが選択されたときに色を消したいです。でセレクターを使用する方法を理解していますListViewが、私の場合、 の xml を定義していない場合Listview、「セレクター」をどのように使用しますか? 事前定義されたものを使用しandroid.R.layout.simple_list_item_1ています。

4

7 に答える 7

6

から、ListViewに電話しますsetChoiceMode(ListView.CHOICE_MODE_SINGLE)。次に、選択したアイテムを強調表示したいときはいつでも を呼び出しますsetItemChecked(index, true)

于 2012-08-26T12:58:15.143 に答える
4

私は欲しいものを手に入れていなかったので、掘り下げ続け、ベストプラクティスではないかもしれないが仕事をする「安価な」解決策を思いついた. アイテムが選択されたときに強調表示され、listFragment から他のアイテムが選択されたときに色が消えるようにしたかったのです。これは私のために働いたものです-私は静的を定義してView V; 初期化しましV = new View(getActivity());

onListItemClick(ListView l, View v , int position, long id)

            V.setBackgroundResource(0);
            v.setBackgroundResource(R.color.BLUE);
            V = v;
于 2012-08-26T17:08:11.400 に答える
4

私は同じことを試しましたが、良い解決策は見つかりませんでした。私が実際に行っているのは、このコードを使用してリスナーを設定することです。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        list_adapter.setSelectedPosition(position);
        listView.invalidate();
    }
});

ここで、リスト アダプターは次のパブリック メソッドを定義します

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = GuiBuilder.createHeroListItemView(heroes.get(position),getContext(),parent,false);
    if(position == selected_pos){
        rowView.setBackgroundColor((rowView.getResources().getColor(R.color.list_item_selected_color)));
    }
    return rowView;
}

public void setSelectedPosition(int selected_pos){
    this.selected_pos = selected_pos;
}

public int getSelectedPosition(){
    return selected_pos;
}

つまり、リスト項目の背景をプログラムで変更します。さらに、リスト要素をクリックしたときの点滅効果を避けるために、押された状態のセレクターを定義しません

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true"
        android:drawable="@drawable/list_item_focused_color" />
    <item android:drawable="@drawable/list_item_default_color" />
</selector>

これは私にとって意図したとおりに機能します。setSelected(true) はリスト項目では機能しないため、これ以上の解決策は見つかりませんでした!

于 2012-08-26T15:13:11.730 に答える
0

私はコード

getListView().setItemChecked(0, true); 

setListAdapter(oAdapter);

コードブロック

于 2013-10-13T20:10:19.633 に答える
0

type-a1pha に似ていますが、セレクターを使用すると、view.setSelected(true) を取得でき、セレクターで定義したスタイルが追加されます。アクションが実行されたら、フラグを削除する必要があります。

于 2013-12-27T18:13:22.123 に答える