0
所以我有一个列表视图,当你点击一行时,它会打开一个新的活动。在新的活动中有一个复选框。如果选中复选框,然后返回到listview活动,它应该在最初单击的列表视图项目旁边设置复选标记。在基于CheckBox的ListView的某些位置设置ImageView
现在发生的事情是,当我检查复选框并返回到列表视图时,无论从哪个行检查复选框,每行都有一个复选标记。
我的继承人与ListView和上点击收听mainactivity启动第二个复选框活动
//fill list view with xml array of routes
final CharSequence[] routeListViewItems = getResources().getTextArray(R.array.routeList);
//custom adapter for list view
ListAdapter routeAdapter = new CustomAdapter(this, routeListViewItems);
final ListView routeListView = (ListView) findViewById(R.id.routeListView);
routeListView.setAdapter(routeAdapter);
routeListView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int listViewItemPosition = position;
CharSequence route = routeListViewItems[position];
int imageId = (int) image.getResourceId(position, -1);
if (route.equals(routeListViewItems[position]))
{
Intent intent = new Intent(view.getContext(), RouteDetails.class);
intent.putExtra("route", routeDetail[position]);
intent.putExtra("imageResourceId", imageId);
intent.putExtra("routeName", routeListViewItems[position]);
intent.putExtra("listViewItemPosition", listViewItemPosition);
startActivity(intent);
}
}
}
);
}
然后继承人从第二活动传回给ListView活动什么IM
@Override ///////for back button///////
public void onBackPressed() {
super.onBackPressed();
////////sets checkmark next to listview item//////
if (routeCheckBox.isChecked())
{
Intent check = new Intent(RouteDetails.this,MainActivity.class);
check.putExtra("checkImageResource", R.drawable.checkmark);
check.putExtra("listViewItemPosition", listViewItemPosition);
startActivity(check);
}
}
和继承人返回到我的listview活动中,我从我的复选框活动中接收信息,并设置对号
编辑为包含完全适应呃类 编辑,包括我发现解决我的问题的代码!
class CustomAdapter extends ArrayAdapter<CharSequence> {
public CustomAdapter(Context context, CharSequence[] routes) {
super(context, R.layout.custom_row ,routes);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater routeInflater = LayoutInflater.from(getContext());
View customView = convertView;
if(customView == null){customView = routeInflater.inflate(R.layout.custom_row, parent, false);}
CharSequence singleRoute = getItem(position);
TextView routeText = (TextView) customView.findViewById(R.id.routeText);
routeText.setText(singleRoute);
/////////////set check mark/////////////
ImageView checkImageView = (ImageView) customView.findViewById(R.id.checkImageView);
int checkImageResourceId = ((Activity) getContext()).getIntent().getIntExtra("checkImageResource",0);
int listViewItemPosition = ((Activity) getContext()).getIntent().getIntExtra("listViewItemPosition",0);
/////my solution was just setting where listviewitemposition == position in my getview method//////
if (listViewItemPosition == position)
{
checkImageView.setImageResource(checkImageResourceId);}
//////////////////////////////////////////////////
return customView;
}
感谢您的任何帮助!
创建一个实体(SYA路线)与两个属性(说的名字,并检查:布尔)和根据此实体的自定义适配器。在适配器的getView方法中实现逻辑,根据“checked”值显示和隐藏复选框。 –
无论如何,你可以用代码发布一个例子吗?我对编程真的很陌生,并且在视觉上会更容易。 – zsh5032
请在活动中粘贴更多内容“我从我的复选框活动中接收信息并设置复选标记” – Hahn