安卓:从setSelecton突出显示列表中的项目(Android: Highlight an it

2019-07-30 20:14发布

我有一个ListView与listselector.xml。 起初,我设置使用setSeletion(位置)的项目。 但与此代码的项目没有得到强调。 当我点击一个项目它只有突出。

        ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems);
    timeListView = (ListView) findViewById(R.id.listList);
    timeListView.setAdapter(ad);
    timeListView.setOnItemClickListener(this);      
    timeListView.setSelector(R.drawable.listselector);
    timeListView.setSelection(toSelectPos);

     ============================= 
     XML      
     <ListView android:id="@+id/listList" android:layout_width="match_parent"    android:layout_height="wrap_content"  android:dividerHeight="1dp" >

listselector.xml代码

     <?xml version="1.0" encoding="UTF-8"?>
     <!-- listselector.xml  -->
     <selector xmlns:android="http://schemas.android.com/apk/res/android">  
<!-- Selected -->
<item android:state_focused="true" android:state_selected="false"
        android:drawable="@drawable/focused"/>

<!-- Pressed -->
<item android:state_selected="true" android:state_focused="false"
        android:drawable="@drawable/selected" />     
      </selector>

上面的代码突出全的ListView,我只是要突出项目(BG改变颜色)。 对于我相信我会创建另一个XML对于该项目,并设置选择属性项&如上做就不一一列举。 纠正我,如果我错了。

问题的关键是,反正只在点击所选项目和为setSelection应该改变。 与上面的代码,它不会改变为setSelection,如何做到这一点。

我看着其他QS,但无法找到我要找的地步,所以请不要将其标记为其他Qs的一个副本。

谢谢

Answer 1:

正如你可能已经在一些答案在这里看到堆栈溢出,你不能把选择,因为它实现了一个视图,以便用户界面必须始终处于触摸模式,你可以看到这里然而,也有一些变通办法你可以做。

你可以设置你的ListView onItemClick具有以下监听器:

    OnItemClickListener itemClickListener = new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View v, int pos, long id) {

    if (v == lastSelectedView) {

    v.setBackgroundResource(0);
    lastSelectedView = null;

    } else if (v != lastSelectedView) {



    if (lastSelectedView != null)

        lastSelectedView
            .setBackgroundColor(android.R.color.transparent);

    lastSelectedView = v;

    v.setBackgroundDrawable(v.getContext().getResources()
        .getDrawable(R.drawable.some_row_background));
    }
}

};

在此,你将色彩lisview项目如想。 但是有一个陷阱。 如果您滚动向上或向下的意见回收将迎来另一种看法 。 您可以“取消”上滚动视图,或者你能找到一种方法来标记视图。

最好的祝福



Answer 2:

我不知道这是否是正确的方式或不但低于解决方案,我从支持-V4实例的片段演示找到。

请检查能够自定义布局和使用此布局列表的列

public class CheckableLayout extends LinearLayout implements Checkable {
    private boolean mChecked;

    public CheckableLayout (Context context) {
        super(context);
    }

    public CheckableLayout (Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setChecked(boolean checked) {
        mChecked = checked;
        // set the custom background image/color
        setBackgroundResource(checked ? R.drawable.category_item_row_selected
                : R.drawable.custom_category_item_row);
    }

    public boolean isChecked() {
        return mChecked;
    }

    public void toggle() {
        setChecked(!mChecked);
    }

}

定义你的列表视图作为单一选择模式像YOUR_LISTVIEW.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

对行(点击的inside OnItemClickListener ),你必须设置该行作为托运像YOUR_LISTVIEW.setItemChecked(index, true);

而已



文章来源: Android: Highlight an item from List on setSelecton