2

我有一个ListView包含复选框的项目,这些复选框的行为有时应该像 aCHOICE_MODE_MULTIPLE有时像 a CHOICE_MODE_SINGLE。What I mean is for certain items in the list, when selected certain other items needs to be deselected whilst other can remain selected.

因此,当检查项目A时,我可以在我的数据中找到需要不选中的项目B,但是我该如何让UI刷新以显示出来,因为我(我相信)找不到View代表B但仅仅是数据的实际实际内容?

4

3 回答 3

1

听起来你有一个好的开始。您是对的,您应该在单击 A 时操作 B 项的基础数据源。

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

  1. getView()在适配器中的方法应该查看您的数据源并convertView根据它找到的内容进行更改。您找不到代表 B 的实际视图,因为在 aListView中,由于Views需要显示不同的数据,它们被回收并被重用。基本上,当一个项目从列表中滚动出来时View,所使用的 被传递给getView()函数 as convertView,准备处理下一个元素的数据。出于这个原因,您可能永远不应该根据用户输入直接更改 aView中的 a ,而应该更改基础数据。ListView
  2. 您可以notifyDataSetChanged()从您的适配器中调用,以表明某处基础数据已更改,并且getView()应该为当前显示在列表中的元素再次调用。

如果您仍然遇到问题,请随时发布一些代码来说明您遇到的特定问题。当问题得到更好的定义时,提供具体的建议会容易得多。希望这可以帮助!

于 2013-02-20T21:41:00.800 回答
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按钮时,我可以向用户显示他/她之前选择的项目已被选中。

于 2013-02-20T21:38:02.123 回答
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();
         ,,,
}

}

于 2014-05-07T08:40:22.170 回答