2016-12-04 40 views
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; 
    } 

感谢您的任何帮助!

+0

创建一个实体(SYA路线)与两个属性(说的名字,并检查:布尔)和根据此实体的自定义适配器。在适配器的getView方法中实现逻辑,根据“checked”值显示和隐藏复选框。 –

+0

无论如何,你可以用代码发布一个例子吗?我对编程真的很陌生,并且在视觉上会更容易。 – zsh5032

+0

请在活动中粘贴更多内容“我从我的复选框活动中接收信息并设置复选标记” – Hahn

回答

0

是我只需要使用一个解决办法,如果语句设置listviewItemPosition ==位置在我getView方法

/////my solution was just setting where listviewitemposition == position in my getview method////// 
    if (listViewItemPosition == position) 
    { 
    checkImageView.setImageResource(checkImageResourceId);} 
    //////////////////////////////////////////////////