1

これが活動です

public void onListItemClick(ListView parent, View v,int position, long id) {
        String str;

        if (nRowSelected>=0) {
            View row=parent.getChildAt(nRowSelected);
            if (row!=null) {
                row.setBackgroundColor(0xFFFFFFFF);
            }
        }
        nRowSelected=position;

        v.setBackgroundColor(Color.GRAY);
    }//onListItemClick

これは私のリストビューです

        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="425dp" 
            >
        </ListView>

単一の選択肢を強調表示する必要があります。行番号1を選択/フォーカスします。しかし、スクロールすると、フォーカスが複数になります。行8の行フォーカスも

これがキャプチャです

画像1

画像2

それを修正する方法は?

4

4 に答える 4

2

これを xml に追加します。

android:cacheColorHint="#00000000"
于 2013-01-22T05:00:07.407 に答える
2

アダプターが行レイアウトをリサイクルする方法と戦っています...現在のアダプターを拡張してオーバーライドgetView()し、正しい行 (および正しい行のみ) を強調表示する必要があります。

最も基本的なレベルでは、次のようになります。

public View getView(...) {
    View view = super.getView(...);

    if(position == mRowSelected) {
        view.setBackgroundColor(Color.GRAY);
    }
    else { // You must use a default case to "un-highlight" the reused layout
        view.setBackgroundColor(0xFFFFFFFF);
    }
    return view;
}
于 2013-01-22T04:55:55.243 に答える
0

コードを次のように置き換えますxml::

<ListView
   android:id="@android:id/list"
   android:layout_width="match_parent"
   android:layout_height="425dp" 
   android:cacheColorHint="#00000000">
</ListView>
于 2013-01-22T05:06:05.690 に答える
0

こんにちは、以下のコードを参照してください。これは単一選択選択の例であり、うまく機能します。

public class List17 extends ListActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Use the built-in layout for showing a list item with a single
    // line of text whose background is changes when activated.
    setListAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_activated_1, mStrings));
    getListView().setTextFilterEnabled(true);

    // Tell the list view to show one checked/activated item at a time.
    getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

    // Start with first item activated.
    // Make the newly clicked item the currently selected one.
    getListView().setItemChecked(0, true);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // Make the newly clicked item the currently selected one.
    getListView().setItemChecked(position, true);
}

private String[] mStrings = Cheeses.sCheeseStrings;

}

これはリスト アクティビティであり、リスト ビューまたはリスト アクティビティがあるかどうかは関係ありません。

于 2013-01-22T05:52:01.777 に答える