2012-08-07 188 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