2012-08-07 91 views
3

我有一个ListView & listselector.xml。最初我使用setSeletion(位置)来设置项目。但使用此代码时,项目不会突出显示。只有当我点击一个项目时才会突出显示。Android:突出显示setSelecton上的项目

 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上更改,如何实现这一点。

我查看了其他Q,但找不到我要找的点,所以请不要将它标记为其他Q的重复。

感谢

+0

你想多选还是单选? – rajpara 2012-08-07 09:26:03

+0

@AndroidCoader,仅限单个选择 – Tvd 2012-08-07 09:27:26

+0

setSeletion(位置)设置当前选择的项目。如果在触摸模式下,该项目不会被选中,但它仍然会被适当定位。如果指定的选择位置小于0,则选择位置0处的项目。 – 2012-08-07 09:29:34

回答

0

正如您在堆栈溢出中可能已经看到的一些答案,您不能将视图选中,因为它已实现,因此用户界面必须始终处于触摸模式,因为您可以看到here 但是,有一些你可以做的解决方法。

你可以设置你的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项目如想。但有一个问题。 如果您向下滚动或向上滚动,回收视图将标记另一个视图。您可以“取消”滚动视图,或者您可以找到标记视图的方法。

祝你好运

1

我不知道这是否是正确的方式或不但低于解决方案,我从支持-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);

这就是它

+0

这会给我一个复选框,我不想要任何检查 - 只是简单的列表。 – Tvd 2012-08-07 13:06:33

+0

你做了你自己的适配器为listview?请尝试制作自己的listview适配器并实现我的答案。 – rajpara 2012-08-08 06:33:48

+0

@Tvd请检查https://github.com/vimalrajpara2006/ListView-with-Selected-Row项目,这对我的单一选择工作正常。 – rajpara 2012-08-08 12:03:34

相关问题