2014-04-25 16 views
0

我正在開發一個android的小應用程序。我使用帶有TextView和CheckBox的ListView。
我已經可以處理CkeckBox勾號。此外,我想讓ListView的整行可點擊,但我找不到任何方法來實現這一點。 我已經試圖使ListView的點擊有:使整個ListView行可點擊

android:clickable="true" 

而且我也試了一下,此代碼爲ListView:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(null,"Clicked",Toast.LENGTH_LONG 
    } 
}); 

這是我爲ListView代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="de.matthias.lolchampionowner.app.ChampionActivity"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/championListView" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentBottom="true" /> 

</RelativeLayout> 

像WhatsApp一樣。通過Android Studio,我可以發現這也是一個ListView,但它的代碼太混亂,無法從中獲得任何東西。
這是一張圖片:WhatsApp ListView

我不知道如何實現它。我appeciate任何幫助。


這裏是NKN答案:

u必須重寫getView方法。這裏是我的代碼,我可以處理來自ListView的點擊和對CheckBox diveded:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if(convertView == null) { 
     convertView = inflater.inflate(R.layout.row_name_check, null); 
     holder = new ViewHolder(); 
     holder.textView = (TextView) convertView.findViewById(R.id.textViewRow); 
     holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBoxRow); 
     convertView.setTag(holder); 
    } 
    holder = (ViewHolder) convertView.getTag(); 
    final ChampionActivity.EachRow row = this.getItem(position); 
    row.checked = ItemStorage.getChampSkinOwned(row.text); 
    holder.textView.setText(row.text); 
    holder.checkBox.setChecked(row.checked); 
    holder.checkBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(((CheckBox)v).isChecked()) { 
       ItemStorage.setChampSkinOwned(row.text, true); 
      } else { 
       ItemStorage.setChampSkinOwned(row.text, false); 
      } 
     } 
    }); 
    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("onClick", row.text + " clicked"); 
      //Toast.makeText(null,"Clicked",Toast.LENGTH_LONG); 
     } 
    }); 
    return convertView; 
} 
+1

大畫面,或許還有一點更黑在這裏和那裏,這是完美的; - ) – Ridcully

+0

哈哈是的。但我不希望整個互聯網看到所有的數字:)但我想你知道我想用它顯示 – cptKopernikus

+0

setOnItemClickListener()應該做你除了。適合我... – shkschneider

回答

1

也許最好的辦法是延長了ArrayAdapter並覆蓋getView()方法。這個方法的第二個參數是View(通常被稱爲convertView,但不一定),隱約地說,是行的表示,所以這個方法將被調用每行。只需聲明你的onClickListener()就可以了。

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 
    ... 

    convertView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
     ... 
    } 
    }); 

    ... 
} 
+0

沒有setOnItemClickListener,而是一個setOnClickListener。我用這個,它很好。但它仍然不顯示「正常」的背景變化,即藍色。有沒有什麼方法可以啓用這個功能,還是需要編寫代碼? – cptKopernikus

+0

對。更新,謝謝。 – nKn

+0

如果選定的行未突出顯示,您可以將自定義選擇器放在列表視圖中。 http://stackoverflow.com/questions/2562051/listview-item-background-via-custom-selector/2830994#2830994 – Misca

7

我也有同樣的問題,我不得不改變這個來得到想要的結果。 在爲ListView控件的代碼(不是列表項),可以修改爲

android:layout_width="match_parent" 

希望這會爲你們工作,以及