ListView點擊Item其他Item響應的錯誤筆記

在編寫一個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問題解決了, 代碼中紅色標註部分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章