好的,我对此绝对坚定。我在模式singleChoice中有一个ListView,当我点击它时我将它设置为选中。并且我将背景设置为带有选择器的drawable(我尝试了许多可以对应于所选项目的状态)。然而,当我选择它时,背景不会改变,我不知道为什么。我为此参观了几十个论坛,但无法得到答案。这是我的代码:
我的活动中的ListView:
<com.gaetanl.aspa.ui.component.ExtensibleListView
android:id="@+id/payment_billing_address_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/item_selectable"
android:choiceMode="singleChoice"></com.gaetanl.aspa.ui.component.ExtensibleListView>
其班级:
public class ExtensibleListView extends ListView {
public ExtensibleListView(Context context) {
this(context, null);
}
public ExtensibleListView(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.listViewStyle);
}
public ExtensibleListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d(this, "item " + position + " selected = " + view.isSelected());
view.setSelected(true);
Log.d(this, "selected = " + view.isSelected());
}
});
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_activated="true"
android:drawable="@color/colorPrimary" />
<item
android:state_active="true"
android:drawable="@color/colorPrimary" />
<item
android:state_checked="true"
android:drawable="@color/colorPrimary" />
<item
android:state_selected="true"
android:drawable="@color/colorPrimary" />
<item
android:drawable="@android:color/transparent" />
</selector>
答案 0 :(得分:0)
方法I:
在列表适配器中,为position创建getter和setter方法。然后在getView方法中,比较位置,如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item.xml, null);
holder = new ViewHolder(); holder.itemLayout(LinearLyout)convertView.findViewById(R.id.item_layout);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if(position==getPosition()){
holder.itemLayout.setBackgroundColor(ContextCompat.getColor(context,R.color.back_ground_color));
}else{
holder.itemLayout.setBackgroundColor(ContextCompat.getColor(context,R.color.background_unselect));
}
return convertView;
}
public void setPosition(int posit) {
this.position = posit;
}
private int getPosition() {
return this.position;
}
然后在活动中,在listView的onItemSelected()方法中:调用适配器的setPositionMethod:
list_view.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
mAdapter.setPosition(i);
mAdapter.notifyDataSetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
只需将列表选择器设置为透明..应该完成这项工作。
方法II:
或者可能是,你需要一个如下所示的选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@color/color_primary" >
</item>
<item
android:state_focused="true"
android:drawable="@color/color_primary" >
</item>
<item
android:state_selected="true"
android:drawablecolor="@color/color_primary" >
</item>
<item android:color="@color/@color/transparent" >
</item>
</selector>
然后将列表选择器设置为@ drawable / list_selector
但是,如果这不起作用,那么我认为你可以将项目xml布局的背景设置为
android:background="@drawable/list_selector"
答案 1 :(得分:0)
好的,我找到了答案。我愚蠢地试图设置ListView背景(参见上面的代码)。我需要做的是,在创建适配器时,选择包含所选项目变体的项目的视图。 Android默认有一个:simple_list_item_single_choice。
所以这是工作代码:
myListView = ((ListView) findViewById(R.id.listview_id));
ArrayAdapter<String> myAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_single_choice, myList);
myListView.setAdapter(myAdapter);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setSelected(true);
}
});
然后你就拥有了它,一个带有单选按钮的列表视图,当你点击它时会检查它们。
这是我的layout.xml中的ListView:
<ListView
android:id="@+id/listview_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice">
</ListView>