Java Android ListView:修改一行会影响其他行
我目前正在制作一个包含ListView的活动,其中ImageView作为复选框,如果用户点击该行的ImageView,该复选框将更改。问题是,当选择一行修改其ImageView时,但在浏览了几行(准确地说是8行)之后,我发现这一行的ImageView也被修改了 以下是一些相关代码: HistoryRowAdapter.javaJava Android ListView:修改一行会影响其他行,java,android,listview,adapter,Java,Android,Listview,Adapter,我目前正在制作一个包含ListView的活动,其中ImageView作为复选框,如果用户点击该行的ImageView,该复选框将更改。问题是,当选择一行修改其ImageView时,但在浏览了几行(准确地说是8行)之后,我发现这一行的ImageView也被修改了 以下是一些相关代码: HistoryRowAdapter.java @Override public View getView(int position, View convertView, ViewGroup paren
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater theInflater = LayoutInflater.from(getContext());
convertView = theInflater.inflate(R.layout.history_row, parent, false);
convertView.setTag(getItemId(position));
}
final Operation currentOperation = getItem(position);
//Log.d("KS", "Name: " + currentOperation.toString());
DBTools db = new DBTools(getContext());
HashMap<String,String> patientData = db.getPatientData(currentOperation.getId());
String patientName = "N/A";
if (Integer.parseInt(patientData.get("id")) != -1){
//Patient Data was entered
String lastName = patientData.get("last_name");
String firstName = patientData.get("first_name");
patientName = lastName.length()!=0 && firstName.length()!=0 ? lastName+", "+firstName.charAt(0): "N/A";
}
TextView nameTextView = (TextView) convertView.findViewById(R.id.nameFieldTextView);
nameTextView.setTextColor(Color.WHITE);
nameTextView.setText(patientName);
String[] dateTime = currentOperation.getDatetime().split("_");
TextView dateTextView = (TextView) convertView.findViewById(R.id.dateFieldTextView);
dateTextView.setTextColor(Color.WHITE);
dateTextView.setText(dateTime[0]);
dateTime[1] = dateTime[1].replace("-",":");
TextView timeTextView = (TextView) convertView.findViewById(R.id.timeFieldTextView);
timeTextView.setTextColor(Color.WHITE);
timeTextView.setText(dateTime[1]);
final ProgressDialog loading = new ProgressDialog(context);
loading.setMessage("Loading Procedure...");
loading.setCancelable(false);
loading.setProgressStyle(ProgressDialog.STYLE_SPINNER);
Button viewOperationButton = (Button) convertView.findViewById(R.id.viewOperationButton);
viewOperationButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, ReviewMode.class);
i.putExtra("selectedOperation",currentOperation.getId());
i.putExtra("deviceStatus",0);
loading.show();
context.startActivity(i);
}
});
/*ImageView checkedImageView = (ImageView) theView.findViewById(R.id.checkedImageView);
for (int i = 0; i< itemsSelected.size(); i++){
if(position == itemsSelected.get(i)){
checkedImageView.setImageResource(R.drawable.selected_row);
}
}*/
return convertView;
}
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
LayoutInflater theInflater=LayoutInflater.from(getContext());
convertView=inflater.flate(R.layout.history\u行,父级,false);
setTag(getItemId(position));
}
最终操作currentOperation=getItem(位置);
//Log.d(“KS”,“Name:”+currentOperation.toString());
DBTools db=newdbtools(getContext());
HashMap patientData=db.getPatientData(currentOperation.getId());
字符串patientName=“不适用”;
if(Integer.parseInt(patientData.get(“id”))!=-1){
//输入患者数据
字符串lastName=patientData.get(“last_name”);
String firstName=patientData.get(“first_name”);
patientName=lastName.length()!=0&&firstName.length()!=0?lastName+,“+firstName.charAt(0):“不适用”;
}
TextView名称TextView=(TextView)convertView.findViewById(R.id.nameFieldTextView);
nameTextView.setTextColor(Color.WHITE);
nameTextView.setText(patientName);
字符串[]dateTime=currentOperation.getDatetime().split(“”);
TextView dateTextView=(TextView)convertView.findViewById(R.id.dateFieldTextView);
dateTextView.setTextColor(Color.WHITE);
dateTextView.setText(dateTime[0]);
dateTime[1]=dateTime[1]。替换(“-”,“:”);
TextView timeTextView=(TextView)convertView.findViewById(R.id.timeFieldTextView);
timeTextView.setTextColor(Color.WHITE);
timeTextView.setText(dateTime[1]);
最终ProgressDialog加载=新建ProgressDialog(上下文);
加载.setMessage(“加载过程…”);
加载。可设置可取消(false);
加载.setProgressStyle(ProgressDialog.STYLE\u微调器);
按钮视图操作按钮=(按钮)convertView.findViewById(R.id.viewOperationButton);
viewOperationButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意图i=新意图(上下文,ReviewMode.class);
i、 putExtra(“selectedOperation”,currentOperation.getId());
i、 putExtra(“设备状态”,0);
loading.show();
背景。起始触觉(i);
}
});
/*ImageView checkedImageView=(ImageView)theView.findViewById(R.id.checkedImageView);
对于(int i=0;i
“检查”行的函数:
公共视图getViewByPosition(int位置,ListView ListView){
final int firstListItemPosition=listView.getFirstVisiblePosition();
final int lastListItemPosition=firstListItemPosition+listView.getChildCount()-1;
if(位置public View getViewByPosition(int position, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (position < firstListItemPosition || position > lastListItemPosition ) {
return listView.getAdapter().getView(position, null, listView);
} else {
final int childIndex = position - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
public void buttonSelect(){
if (this.highlightedIndex != -1){
int firstRow = proceduresListView.getFirstVisiblePosition();
int lastRow = proceduresListView.getLastVisiblePosition();
Log.d("KS","First Row: "+firstRow);
Log.d("KS","Last Row: "+lastRow);
//RelativeLayout highlightedRow = (RelativeLayout) proceduresListView.getChildAt(proceduresListView.getCheckedItemPosition()%7);
Log.d("KS","Checked:"+proceduresListView.getCheckedItemPosition());
RelativeLayout highlightedRow = (RelativeLayout) getViewByPosition(proceduresListView.getCheckedItemPosition(), proceduresListView);
Log.d("KS","Selected:"+this.highlightedIndex);
ImageView checkboxRow = (ImageView) highlightedRow.findViewById(R.id.checkedImageView);
if (selectedItems.contains(this.highlightedIndex)){
Log.d("KS","Items: "+selectedItems.toString());
checkboxRow.setImageResource(R.drawable.normal_row);
//selectedItems.remove(this.highlightedIndex);
selectedItems.remove(selectedItems.indexOf(this.highlightedIndex));
} else {
checkboxRow.setImageResource(R.drawable.selected_row);
selectedItems.add(this.highlightedIndex);
Log.d("KS","Items: "+selectedItems.toString());
}
checkedCountTextView.setText(selectedItems.size()+"");
//Log.d("KS", "Select: " + highlightedIndex);
//Log.d("KS","Items: "+selectedItems.toString());
}
}