我有一个ListView
,我使用视图持有者模式用多个元素填充它。我指定了一个Selector
来更改选择的背景色。当用户选择了一个项目(或不选择)并选择继续到我的控制流中的下一个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;
}
为什么不在列表中使用全局项单击侦听器,而不是按视图单击侦听器?