单击一个项目时如何更改Android ListView中的其他项目

时间:2013-02-20 21:15:55

标签: android android-listview listviewitem

我的ListView包含带有复选框的项目,这些复选框的行为有时像CHOICE_MODE_MULTIPLE,有时像CHOICE_MODE_SINGLE。我的意思是对于列表中的某些项目,当选择某些其他项目时,需要取消选择,而其他项目可以保持选中状态。

因此,当项目 A 被选中时,我可以在我的数据中找到需要取消选中的 B 项,但如何让UI刷新以显示为我(我相信)找不到代表 B 的实际View,只是它的数据?

3 个答案:

答案 0 :(得分:0)

你可以使用singleChoice alartDialog,我用过像:

private int i = 0; // this is global
private final CharSequence[] items = {"Breakfast", "Lunch", "Dinner"}; // this is global

Button settings = (Button)view.findViewById(R.id.settings);

settings.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(final View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());

    //Title of Popup
    builder.setTitle("Settings");

    builder.setSingleChoiceItems(items, i,
          new DialogInterface.OnClickListener() {
       // When you click the radio button
       public void onClick(DialogInterface dialog, int item){

           i=item;
       }
    });

    builder.setPositiveButton("Confirm",
           new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {

          if (i == 0) {
                  //it means 1st item is checked, so do your code
          }
          if (i == 1) {
             //it means 2nd item is checked, so do your code
          } /// for more item do if statement    
        }
    });
      //When you click Cancel, Leaves PopUp.
      builder.setNegativeButton("Cancel", null); 
      builder.create().show();

    }
});

我已初始化i=0,因此当用户第一次点击settings按钮时,会选择第一个项目。然后,当用户选择其他项目时,我保存了i值,以便下次用户点击settings按钮时,我可以向用户显示他/她之前选择的项目。

答案 1 :(得分:0)

这听起来像是一个良好的开端。你是对的,你应该在单击A时操纵项目B的基础数据源。

可能对您有所帮助的两个提示:

  1. 适配器中的getView()方法应该查看您的数据源,并根据找到的内容更改convertView。您无法找到代表B的实际视图,因为在ListView中,Views会被回收并重新使用,因为需要显示不同的数据。基本上,当项目从列表中滚动时,使用的View将作为getView()传递给convertView函数,准备处理下一个元素的数据。因此,您可能永远不应该根据用户输入直接更改View中的ListView,而是基础数据。
  2. 您可以从适配器中调用notifyDataSetChanged()来表示某个基础数据已被更改,并且应该再次为列表中当前显示的元素调用getView()
  3. 如果您仍然遇到问题,请随意发布一些代码,说明您遇到的具体问题。在更好地定义问题时,提供具体建议要容易得多。希望这有帮助!

答案 2 :(得分:0)

我今天碰到并解决了这个问题。

public class ItemChooceActivity extends Activity implements OnItemClickListener {

       private int chosenOne = -1;

      class Madapter extends BaseAdapter {
                 .....
                 .....
       @Override
        public View getView(final int position, View convertView,
            ViewGroup parent) {
        // TODO Auto-generated method stub

            if (chosenOne != position) {
                set the view in A style
            } else {
                set the view in B style
            }

        return convertView;
    }
}



        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position,
        long arg3) {
    ,,,,
        chosenOne = position;
        adapter.notifyDataSetChanged();
         ,,,
}

}