2013-08-05 49 views
1

我正在嘗試實施Android活動。基本上,它應該是一個ExpandableListActivity,除了每個「父」行都應該有一個按鈕,這會在其組中添加一個新子。當按鈕被點擊時,我需要知道它屬於哪個父行。我試圖在按鈕中使用標記來存儲其父行的數量,所以當單擊按鈕時,我可以簡單地使用getTag()。ExpandableListView中的按鈕 - 異常標記行爲

爲我的自定義適配器的代碼如下(根據this question):

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 

    if (convertView == null) { 
     convertView = View.inflate(_context, R.layout.group_row, null); 
     Button addButton = (Button)convertView.findViewById(R.id.group_button); 

     addButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Log.d("ExpListAdp", "Tag: " + view.getTag()); 
      } 
     }); 
     addButton.setFocusable(false); 
    }   

    TextView textView = (TextView)convertView.findViewById(R.id.row_name); 
    textView.setText(((HashMap)getGroup(groupPosition)).get("Group Item").toString()); 
    Button addButton = (Button)convertView.findViewById(R.id.group_button); 
    if(addButton.getTag() == null) { 
     addButton.setTag(Integer.valueOf(groupPosition)); 
     Log.d("ELA", "tag set to " + Integer.valueOf(groupPosition)); 
    } 

    return convertView; 
} 

,直到組展開這工作得很好。此時,按鈕點擊返回的值將根據哪些組展開或摺疊而發生變化。它始終是可預期的值之一(也就是說,它總是屬於其中一個按鈕) - 但它很少是它自己的。例如:

點擊0:已記錄 「標籤:0」
點擊1:已記錄 「標籤:1」
單擊2:已記錄 「標籤:2」
單擊3:已記錄 「標籤:3」
展開組1
點擊0:已記錄 「標籤:0」
點擊1:已記錄 「標籤:1」
單擊2:已記錄「標籤:3」
單擊3:已記錄「標籤: 2「

標籤只被分配一次,即使整個展開列表適合屏幕,也會發生。那麼,我的代碼在某個地方是錯的嗎?還是有一些與此有關的錯誤,因爲他們似乎建議here

我沒有粘貼任何代碼,以便不使後甚至更長的時間 - 請讓我知道,如果你想看到的個XML,活動代碼等

+0

嘗試將addButton.setTag()僅放在「if塊」內。不需要檢查if(addButton.getTag()== null)。 – Suji

+0

謝謝,但沒有,它不起作用:(第一個版本正如你所說,我只是改變它,以確保標籤不被重新分配。 – Carlos

回答

1

也許看法正在回收?即使標籤非空,您應該設置它。

此外,您可能根本不需要標籤;爲什麼不包含這些信息作爲onClickListener的一部分?

final int buttonPos = groupPosition; 
addButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick() { 
     Log.i("On button click", "Position = %d", buttonPos); 
     //stuff using buttonPos 
    } 
}; 
+0

那麼,這是它 - 非常感謝你!試圖總是設置標籤,但是我在if(convertView == null)塊中做了這個,正如你所說的,在回收的情況下是不夠的。爲了完成,你的第二個想法不起作用對我來說:進入onClick的groupPosition會保持奇怪的值,而不是真正的值。無論如何,接受並再次感謝! – Carlos