2013-02-20 53 views
1

嗨我需要在列表視圖行中的活動按鈕的幫助。想法然後我按下按鈕,它改變了textview的行。此列表行必須在中激活setOnItemLongClickListener(); 任何人都可以告訴我的例子或教程如何使這樣的事情或一些例子或顯示有我的問題?我厭倦了谷歌它,並不會得到答案...我新的Android和抱歉我的語言和TNX的任何幫助;) 我的想法。Android列表查看與更改行中的文本的活動按鈕

+-----------------------------------------+ 
| textview | textview | textview | Button | 
+----------+----------+----------+--------+ 
| textview | textview | textview | Button | 
+-----------------------------------------+ 

然後按下按鈕的TextView成爲數是這樣的:

+-----------------------------------------+ 
| textview | textview | textview | Button | 
+----------+----------+----------+--------+ 
| textview | textview |  1 | Button | <- this button was pressed 
+-----------------------------------------+ 

我做了按鈕,然後改變它,但問題是,它改變更多的行。像

+-----------------------------------------+ 
| textview | textview | textview | Button | 
+----------+----------+----------+--------+ 
| textview | textview |  1 | Button | <- this button was pressed 
+-----------------------------------------+ 
| textview | textview | textview | Button | 
+----------+----------+----------+--------+ 
| textview | textview |  1 | Button | <- this button was **not** pressed 
+----------+----------+----------+--------+ 
| textview | textview | textview | Button | 
+----------+----------+----------+--------+ 
| textview | textview |  1 | Button | <- this button was **not** pressed 
+-----------------------------------------+ 

我正在使用SimpleAdapter獲取列表。

ListView lv = getListView(); 
lv.setOnItemLongClickListener(listener); 

OnItemLongClickListener listener = new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView<?> parent, final View view, int position, long id) { 
     btn1 = (Button) view.findViewById(R.id.button1); 
     btn1.setOnClickListener(new OnClickListener(){ 
      int number= 0; 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       TextView textView = (TextView) v.findViewById(R.id.textView_must_be_changed); 
       number++; 
       textView.setText(String.valueOf(number)); 
      }     
     }); 
    } 
}; 

我的佈局XML是

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:id="@+id/gridas" 
     android:layout_height="fill_parent" 
     android:choiceMode="multipleChoice" 
     android:columnCount="10" 
     android:descendantFocusability="beforeDescendants" > 


     <TextView 
      android:id="@+id/Textview" 
      android:layout_column="5" 
      android:layout_columnSpan="3" 
      android:layout_gravity="left|bottom" 
      android:layout_row="1" 
      android:layout_rowSpan="2" 
      android:text="4.3 kg" /> 

     <TextView 
      android:id="@+id/Textview" 
      android:layout_column="7" 
      android:layout_gravity="left" 
      android:layout_row="1" 
      android:layout_rowSpan="2" 
      android:text="35 cm" /> 



     <TextView 
      android:id="@+id/Textview" 
      android:layout_width="163dp" 
      android:layout_height="49dp" 
      android:layout_column="9" 
      android:layout_gravity="left" 
      android:layout_row="2" 
      android:gravity="left" 
      android:text="949.00 Lt" 
      android:textSize="32sp" 
      android:textStyle="bold" /> 



     <TextView 
      android:id="@+id/**textView_must_be_changed**" 
      android:layout_column="9" 
      android:layout_gravity="left|top" 
      android:layout_row="1" 
      android:text="tekstukas" 
      /> 

     <Button 
      android:id="@+id/button1" 
      android:layout_column="9" 
      android:layout_gravity="left|top" 
      android:layout_row="3" 
      android:text="Button" 
      android:focusable="false" 
      android:focusableInTouchMode="false"/> 

    </GridLayout>  

回答

3

您需要爲列表視圖創建自定義適配器。並且在此適配器的getView()方法中,您應該設置單擊按鈕偵聽器。當你按下行按鈕時,這個監聽器會調用。在這個監聽器中,你必須得到你將要改變的行數據。嗯..我認爲你應該從你的聽衆的onClick參數中看到它的標籤。而且你也應該設置這個標籤。在下面的例子中我將展示如何..

@Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     PhoneContactListItem item = getItem(position); 
     TextView contactName; 
     TextView contactPhone; 
     CheckBox isCheckedCheckBox; 

     if(convertView == null) { 
      convertView = LayoutInflater.from(context).inflate(R.layout.project_contact_list_item_layout, null); 
      contactName = (TextView) convertView.findViewById(R.id.projectContactRow_contactName); 
      contactPhone = (TextView) convertView.findViewById(R.id.projectContactRow_contactPhone); 
      isCheckedCheckBox = (CheckBox) convertView.findViewById(R.id.projectContactRow_checkBox); 

      convertView.setTag(new ViewHolder(contactName, contactPhone, isCheckedCheckBox)); 

      //setting on click listener for isCheckedCheckBox 
      isCheckedCheckBox.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 
        CheckBox cb = (CheckBox)v; 
        PhoneContactListItem i = (PhoneContactListItem)cb.getTag(); 
        i.toggleChecked(); 
        cb.setChecked(i.isChecked()); 
       }    
      }); 
     } else { 
      ViewHolder vh = (ViewHolder)convertView.getTag(); 
      contactName = vh.getContactName(); 
      contactPhone = vh.getContactPhone(); 
      isCheckedCheckBox = vh.getIsCheckedCheckBox(); 
     } 

     //initializing views 
     isCheckedCheckBox.setTag(item); 
     contactName.setText(item.getPhoneContact().getContactName()); 
     contactPhone.setText(item.getPhoneContact().getContactPhone()); 

     //initializing checkbox 
     if(item.isChecked()) 
      isCheckedCheckBox.setChecked(true); 
     else 
      isCheckedCheckBox.setChecked(false); 

     //enabling or disabling check box 
     if(item.isCheckDisabled()) 
      isCheckedCheckBox.setClickable(false); 
     else 
      isCheckedCheckBox.setClickable(true); 

     //showing checkboxes 
     if(showCheckBoxes) 
      isCheckedCheckBox.setVisibility(View.VISIBLE); 
     else 
      isCheckedCheckBox.setVisibility(View.GONE); 

     return convertView; 
    } 

    private class ViewHolder { 
     private TextView contactName; 
     private TextView contactPhone; 
     private CheckBox isCheckedCheckBox; 

     public ViewHolder(TextView contactName, TextView contactPhone, CheckBox isCheckedCheckBox) { 
      this.contactName = contactName; 
      this.contactPhone = contactPhone; 
      this.isCheckedCheckBox = isCheckedCheckBox; 
     } 

     /* 
     * getters 
     */ 
     public TextView getContactName() { 
      return contactName; 
     } 
     public TextView getContactPhone() { 
      return contactPhone; 
     } 
     public CheckBox getIsCheckedCheckBox() { 
      return isCheckedCheckBox; 
     } 
    } 

這不是你的情況,但同樣..

+0

感謝您的幫助;) 但請告訴我更多;)所以,如果我想做出同樣的清單,那麼我必須採取SimpleAdapter源代碼並複製tu我的CustomAdapter並將getView更改爲像這樣的東西,但只是爲了我的佈局? http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/SimpleAdapter.java – 2013-02-20 13:50:49

+0

恰好不是:)您應該擴展自定義適配器public CustomAdapter(上下文上下文,List dataList)super(上下文,R.layout.row_layout,R.id.key_id,dataList);類定製適配器擴展ArrayAdapter } @Override public View getView(int position,View convertView,ViewGroup parent){// ...} ' – rdbmsa 2013-02-20 15:42:56

0

ListView再利用行作爲優化,這就是爲什麼你看到的更改的文本行數一旦你點擊了一個按鈕。

您需要爲全部行設置您的textView值,即使文本與佈局中的文本相同。

+0

感謝您的幫助;)但是告訴我更多請;),所以如果我想打同樣的名單,然後我必須採用SimpleAdapter源代碼並複製我的CustomAdapter並將getView更改爲這樣的內容,但僅用於我的佈局? – 2013-02-20 13:51:14

+0

是的,除了你應該讓你的CustomAdapter擴展**'SimpleAdapter',然後只是**覆蓋** getView()'方法而不是複製整個源代碼 – nicopico 2013-02-20 13:56:20

1

不知道爲什麼你要在你的longclick監聽器中設置onclick監聽器。

什麼,你應該做的是創建一個自定義的適配器和定製適配器內覆蓋getView方法和膨脹其中包含

的TextView的TextView的TextView按鈕

的按鈕,然後得到引用的XML文件, textview使用

buttonView = inflatedView.findViewById(R.id.button); 
textView = inflatedView.findViewById(R.id.textView) 

並將onClicklistener綁定到此按鈕引用,該引用編輯此textView引用中的文本。

+0

感謝您的幫助;)告訴我更多請;)所以如果我想做出同樣的清單,那麼我必須採用SimpleAdapter源代碼並複製我的CustomAdapter並將getView更改爲像這樣的東西,但僅用於我的佈局? – 2013-02-20 13:51:35

相關問題