独自のカスタムテーマを作成しましたが、作業中のListViewなど、テーマが色付けされていないビットがいくつかあるので、それらを1つずつ実行しています。私はこれで宿題をし、描画可能な背景セレクターXMLファイルの作成について知っていますが、正しく機能していません。さらに、私はそれを強制するために他のいくつかの方法を試しましたが、それを機能させることができません。私はあなたに問題を示し、それから私のコードでそれに従います。
「押された」色が機能しています。このスクリーンショットでは、アイテムを押し続けています。
ただし、指を離すと、選択したアイテムが色付きのままになりません。チェックリスト1が選択されて表示されますが、強調表示されていないことに注意してください。
これは、各リストアイテムビューに適用する背景ドローアブルです。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false"
android:drawable="@android:color/transparent" />
<item android:state_pressed="true" android:drawable="@android:color/holo_orange_dark" />
<item android:state_selected="true" android:state_pressed="false"
android:drawable="@android:color/holo_orange_light" />
</selector>
「selected」には「holo_orange_light」が表示されますが、表示されないことに注意してください。次のコードは、背景を割り当てる場所です。私は当初、既成のArrayAdapterをインスタンス化していました。この背景を適用するために、私はArrayAdapterから派生し、ビューを構築するメソッドにコードを追加しました。
カスタマイズされたArrayAdapterは次のとおりです。
private class CustomArrayAdapter extends ArrayAdapter<Checklist> {
public CustomArrayAdapter(Context context, int resource, int textViewResourceId,
List<Checklist> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = super.getView(position, convertView, parent);
convertView.setBackgroundResource(R.drawable.listview_background);
return convertView;
}
}
FWIWこれはアダプターを作成する呼び出しであるため、使用したパラメーターを確認できます。
setListAdapter(new CustomArrayAdapter(getActivity(),
android.R.layout.simple_list_item_activated_1, android.R.id.text1,
KnowUrStuffApp.getDbHelper().getChecklists()));
そのため、そのコードは私を今のところに残しました。しかし、私はいくつかの冗長な方法でそれを強制的に着色しようとしました。ビューの背景をホロオレンジに明示的に色付けするsetSelectionHilightというルーチンを作成しました。次に、setSelectionHilightを呼び出すListViewに割り当てられたonItemSelectedListenerを作成しました。次に、すべてがロードされたら、ルーチンを明示的に呼び出します。これらのどれも効果がありませんでした:
private void setSelectionHilight(ListView listView, View selectedView) {
for (int i = 0; i < listView.getChildCount(); i++) {
View child = listView.getChildAt(i);
if (child == selectedView)
child.setBackgroundColor(getActivity().getResources().getColor(android.R.color.holo_orange_light));
//else
//child.setBackgroundResource(0);
}
}
private OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
setSelectionHilight((ListView) parent, view);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
setSelectionHilight((ListView) parent, null);
}
};
繰り返しになりますが、私はちょうど上のチャンクで実験していました。私の問題の解決策を検討する際にそれを無視しても問題ありませんが、全体像としてそれを含めます。これを解決するための助けをありがとう。補助的な情報のもう1つは、ListViewがListFragmentにカプセル化されており、それに組み込まれているデフォルトのレイアウトを使用していることです。ListViewの明示的なXML要素がありません。