我正在嘗試實施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,活動代碼等
嘗試將addButton.setTag()僅放在「if塊」內。不需要檢查if(addButton.getTag()== null)。 – Suji
謝謝,但沒有,它不起作用:(第一個版本正如你所說,我只是改變它,以確保標籤不被重新分配。 – Carlos