2012-02-28 77 views
-1

在我的listview的getview中,我將位置分配給另一個變量。 我在listrow中有一個複選框。android listview獲取視圖的位置

我已經爲複選框定義了setOnCheckedChangeListener。

現在,當我檢查/取消選中行時,我發現getview沒有被調用。 但我使用在getview中設置的位置值,它給了我正確的值。

即如果我單擊第10個位置,該變量也有10個。

請解釋我是如何工作的。

我的代碼如下

public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     final int pos = position; 
     barcodeForSelectedRow = productList.get(pos).getBarcode(); 
     formatForSelectedRow = productList.get(pos).getFormat(); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.product_list_row, null); 

      holder = new ViewHolder(); 
      holder.text1 = (TextView) convertView.findViewById(R.id.productid); 

      holder.text2 = (TextView) convertView.findViewById(R.id.price); 
      holder.text2.setOnClickListener(listener); 
      holder.image = (ImageView) convertView 
        .findViewById(R.id.productimageid); 
      holder.check=(CheckBox) convertView.findViewById(R.id.checkbox); 
      convertView.setTag(holder); 
      holder.image.setOnClickListener(listener); 

    } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     // setWishListItemsInScanList(pos, convertView); 
     holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      public void onCheckedChanged(CompoundButton checkBox, 
        boolean isChecked) { 
       Log.i("CheckBox check", "" + pos); 


     }); 
     return convertView; 
    } 

我在這裏設置getview 內POS =位置,當我點擊第10行的複選框,則oncheckchnaged聽衆是越來越調用,但不是getview功能 但我看到它在onchechchangedlistener中位置正確。 我想知道它是如何發生的

NB:當我來到這個活動,這是預期的行爲時,調用getview也當我點擊複選框getview不應該被稱爲,它也工作正常。我的問題是如何oncheckchangedlistener獲取位置值正確

+0

您應該提取相關部分,而不是發佈所有此代碼。在這個過程中,你可能會發現解決方案... – Kheldar 2012-02-28 10:46:55

+0

你的意思是,你的控件不會進入複選框的onCheckedChange()? – Hiral 2012-02-28 10:47:25

+1

onCheckedChanged當您更改複選框的狀態時,將調用此函數。不是你的getView方法 – Triode 2012-02-28 10:51:55

回答

1

爲每個特定視圖調用getView(),因此每次設置setOnCheckedChangeListener()時,都會傳遞本地值「pos」。每次調用getview()時,都會創建一個新變量「pos」,並且由於您將其設置爲final,因此無法以其他方式進行設置。所以每個setOnCheckedChangeListener()都有它自己的「pos」變量實例。

+0

是的,這回答了我的問題。非常感謝。 – png 2012-02-28 11:33:41

2

你是什麼意思getview沒有被調用?使用getview中的位置時要小心。如果你滾動的位置將被回收,以及如果你onresume。

編輯 您的評論的簡短回答將是list.getPositionInView(View view);

+0

我不認爲該位置被回收,轉換視圖將被回收的每個視圖組。但是位置不會在滾動上發生變化,因爲通常位置用於從數組array/list中獲取內容 – png 2012-02-28 10:56:13

+0

您的意思是說您的getview函數沒有被調用?如果它沒有被調用,甚至不應該加載該活動,那麼最多隻會得到一個空的活動。如果您的視圖不可滾動,則在位置活動正確的情況下不會有問題。如果是這種情況,請暫停活動(打回家),然後從您的圖標返回活動並檢查您的位置。你可能會發現你的位置是相反的,或者你只有一半的位置,每一個被調用兩次。 getpositioninview()會給你更多的可靠性。 – maebe 2012-02-28 11:05:08

+0

getview被調用,每當我來到這個活動,這是預期的行爲,當我點擊一個複選框getview不應該被稱爲,並且它也工作正常。我的問題是,oncheckchangedlistener如何正確獲取位置值。也是我的觀點滾動 – png 2012-02-28 11:08:10