ListView
ビュー ホルダー パターンを使用して、複数の要素を設定します。Selector
選択範囲の背景色を変更するためにa を指定しました。ユーザーが項目を選択して (または選択せずに) Activity
、制御フローで次の項目に進むことを選択した場合、ユーザーが選択した項目を取得してビジネス ロジックにフィードしたいと考えています。
私のジレンマは次のとおりAdapterView#getSelectedItem()
ですnull
。私が必要とするのは、選択されていないアイテムがアクティブになっていることを確認することだと思いますが、その方法はないようです。少なくとも私が見つけることができるわけではありません。次にOnClickListener
、アダプタに を設定してオーバーライドonClick
すると、Selector
が機能します。メソッドを使用してリストビューのアイテムをアクティブに設定できますが、選択を切り替えるという問題に直面します。基本的に私が最初に使いたかったものSelector
。
ここに少しのコードがあります:
persona_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/background_light" android:state_activated="false" />
<item android:drawable="@android:color/background_light" android:state_pressed="false" />
<item android:drawable="@android:color/background_dark" android:state_selected="true" />
<item android:drawable="@android:color/background_dark" android:state_activated="true" />
</selector>
DemoPersonaAdapter.java
@Override
public View getView(int position, View convertView, ViewGroup parentViewGroup)
{
final PersonaViewHolder viewHolder;
final Persona persona = provider[position];
if (convertView == null)
{
convertView = LayoutInflater.from(parentViewGroup.getContext()).inflate(R.layout.list_personas, null);
viewHolder = new PersonaViewHolder(
(ImageView) convertView.findViewById(R.id.persona_icon),
(TextView) convertView.findViewById(R.id.persona_description));
convertView.setTag(viewHolder);
} else {
viewHolder = (PersonaViewHolder) convertView.getTag();
}
Bitmap icon = BitmapFactory.decodeResource(parent.getResources(), persona.getPicture());
viewHolder.setIcon(icon, 50, 50);
viewHolder.setDescription(persona.getName() + " is a " + persona.getType() + "!");
convertView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
((ParentClass)parent).setPersona(persona);
}
});
return convertView;
}