2014-03-29 90 views
0

我使用基本適配器設置背景圖像,如果

<ListView 
     android:id="@+id/lstHome" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:drawSelectorOnTop="false" 
     android:cacheColorHint="#3d4241" 
     android:clickable="true" 
     android:listSelector="@drawable/listbackground"> 
    </ListView> 

和listbackground.xml使用自定義列表視圖按自定義ListView項

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:drawable="@android:color/transparent" android:state_pressed="false" android:state_selected="false"/> 
<item android:drawable="@drawable/list_background" android:state_pressed="true"/> 
<item android:drawable="@drawable/list_background" android:state_pressed="false" android:state_selected="true"/> 
</selector> 

當我在項目點擊圖片背景只是閃爍,但我想它應該被激活 並顯示背景。 我用android:attr/activatedBackgroundIndicator在自定義列表視圖,但它並不適用於API低於11

+0

對不起,這是我的錯誤,我會編輯我的新答案,它會正常工作嘗試這一個.... –

+0

我編輯我的新答案檢查出來..?現在 –

+0

現在我再次改變了我的代碼使用這個,你可以得到結果... –

回答

0

在你的ListView

public class CustomAdapter extends ArrayAdapter<Sample> { 

public ArrayList<Sample> mlist; 
public Context context; 
public LayoutInflater inflater; 
public int[] i ; 
public int start=0; 
private LinearLayout layout; 
private View view; 
private View mLastView; 

public CustomAdapter(Context context, int resource, ArrayList<Sample> mlist) { 
    super(context, resource); 
    this.mlist = mlist; 
    start=0; 
    this.context = context; 
    i = new int[this.mlist.size()]; 
    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getPosition(Sample item) { 
    return super.getPosition(item); 
} 

@Override 
public Sample getItem(int position) { 
    return mlist.get(position); 
} 

@Override 
public int getCount() { 
    return mlist.size(); 
} 

@Override 
public long getItemId(int position) { 
    return super.getItemId(position); 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    view = inflater.inflate(R.layout.listitem, null); 
    layout = (LinearLayout)view.findViewById(R.id.linearlayoutSample);; 
    TextView text1 = (TextView) view.findViewById(R.id.item1); 
    TextView text2 = (TextView) view.findViewById(R.id.item2); 
    layout.setBackgroundColor(Color.BLACK); 
    text1.setText(mlist.get(position).getListitem1()); 
    text2.setText(mlist.get(position).getListitem2());  
    layout.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(start==0) 
      { 
       mLastView = v; 
       start++; 
      } 

      if(start>0) 
      { 
       mLastView.setBackgroundColor(Color.BLACK); 
       mLastView = v; 
      } 

      v.setBackgroundColor(Color.GRAY);    
     } 
    }); 
    return view; 
} 

} 
您將使用該自定義適配器
+0

沒有它不工作還有一件事我使用公共類CustomAdapter擴展了BaseAdapter。 –

+0

我覺得你就像是一個Gmail的視圖是在... ...? –

+0

我用這個view.setOnClickListener(新OnClickListener(){@Override 公共 無效的onClick(視圖v){// 你只要把你的邏輯在這裏並使用該定製適配器 //加載數據通過使用這種特殊的定製適配器到 //您的列表視圖 view.setBackgroundResource(Color.GRAY); } }); –

1

相反listselector的級別上工作,你可以試試這個:

創建bg_key.xml:

<?xml version="1.0" encoding="utf-8" ?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_selected="true" 
     android:drawable="@color/pressed_color"/> 
    <item 
     android:drawable="@color/default_color" /> 
    </selector> 

然後包括這個背景你的ListView:

android:background="@drawable/bg_key" 

,然後在你的活動,爲您的列表視圖創建一個onclick聽者:

listView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) { 
     view.setSelected(true); 

    } 
} 

在bg_key顏色代碼,是給你..

+0

不,我試過,它不會工作。和正如我所說我使用自定義的ListView,如果我在我的自定義設計佈局背景'android:attr/activatedBackgroundIndicator'這將只適用於api級別11或以上,但我想在api級別8和以上 –

0

,你可以與先前版本的代碼試試這個:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@android:color/transparent" android:state_pressed="false" 
      android:state_selected="false"/> 
    <item android:drawable="@drawable/list_background" android:state_pressed="true"/> 
    <item android:drawable="@drawable/list_background" android:state_selected="true"/> 
    <item android:drawable="@drawable/list_background" android:state_active="true"/> 
</selector> 
視圖的onclick

然後,得到的RelativeLayout或LinearLayout中膨脹的行,並設置其ACTIVA特德,也選擇屬性爲真,那樣我認爲你會得到一個背景。

希望有所幫助。

+0

你能解釋代碼............... 。 –

+0

@Wizard代碼的含義是選擇器? –

+0

否您爲此編寫的內容「然後在視圖的onClick中,獲取給行填充的relativeLayout或LinearLayout,並將其激活和選定屬性設置爲true,這樣我認爲您將獲得一個仍然存在的背景。 –