在編寫一個ListView的時候裏面有一個按鈕.在Adapter裏設置了點擊事件.
但是在點擊一個Item的時候發現響應的是另一個Item, position檢查之後也沒有出錯,困擾了很久, 以下是getView源代碼
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
// 自定義視圖
ListItemView listItemView = null;
if (arg1 == null) {
listItemView = new ListItemView();
// 獲取listitem佈局文件
arg1 = listContainer.inflate(R.layout.list_item_warn, null);
// 獲取控件對象
listItemView.tv1 = (TextView) (arg1.findViewById(R.id.tv11));
listItemView.tv2 = (TextView) (arg1.findViewById(R.id.tv22));
listItemView.tv3 = (TextView) (arg1.findViewById(R.id.tv33));
listItemView.tv4 = (TextView) (arg1.findViewById(R.id.tv44));
listItemView.tv5 = (TextView) (arg1.findViewById(R.id.tv55));
listItemView.tv6 = (TextView) (arg1.findViewById(R.id.tv66));
// 設置空間集到arg1
arg1.setTag(listItemView);
} else {
listItemView = (ListItemView) arg1.getTag();
}
// 設置空間內容
listItemView.tv1.setText((String) listItems.get(arg0).get("title"));
listItemView.tv2.setText((String) listItems.get(arg0).get("text"));
listItemView.tv3.setText((String) listItems.get(arg0).get("date"));
listItemView.tv5.setText((String) listItems.get(arg0).get("reason"));
listItemView.tv6.setText((String) listItems.get(arg0).get("id"));
try {
Date date = new SimpleDateFormat("yyyy-MM-dd")
.parse((String) listItems.get(arg0).get("date"));
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH,
calendar.get(Calendar.DAY_OF_MONTH));
date = calendar.getTime();
Date current = new Date();
final int position = arg0;
if (date.before(current)) {
listItemView.tv4.setVisibility(0);
listItemView.tv5.setVisibility(0);
if(listItemView.tv5.getText().toString().equals("回訪未完成原因:(點擊此行添加)")){
listItemView.tv5.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
reasonLayout.setVisibility(View.VISIBLE);
addreasonbtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Thread thread = new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
try {
if (new VisitUtils().insertReason(reasonEditText.getText().toString(),listItems.get(position).get("id").toString(), WarnActivity.this)) {
Message msg = handler.obtainMessage();
msg.what = INSERT_REASON_SUCCESS;
handler.sendMessage(msg);
} else {
System.out.println("插入失敗");
}
} catch (HttpResponseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Message msg2 = handler.obtainMessage();
msg2.what = INSERT_FAIL;
handler.sendMessage(msg2);
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
thread.start();
}});
}});
}else{
listItemView.tv5.setClickable(false);
}
} <span style="color:#ff0000;">else {
listItemView.tv4.setVisibility(8);
listItemView.tv5.setVisibility(View.GONE);
}</span>
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e + "!!!warn activyty 313");
}
return arg1;
}
後來加上else問題解決了, 代碼中紅色標註部分