【问题标题】:Handling selected items from a checkable menu处理从可检查菜单中选择的项目
【发布时间】:2016-06-03 21:59:06
【问题描述】:

我正在使用this 教程创建一个带有可检查项目的子菜单。所以,到目前为止一切正常,但我不知道如何处理选定的项目,因为我是可序列化的新手。这是教程的链接

https://stackoverflow.com/questions/7072347/how-to-select-multiple-checkboxes-in-submenu-on-android?answertab=active#tab-top

   public static final String SETTING_CHECK_BOX = "SETTING_CHECK_BOX";

private ArrayList < SettingCheckBox > settingList;

@Override
public void onCreate(Bundle savedInstanceState) {
    // ... 
    settingList = new ArrayList < SettingCheckBox > ();
    settingList.add ( new SettingCheckBox ( "Option A" ) );
    settingList.add ( new SettingCheckBox ( "Option B" ) );
    // ... add more items
    // restore any previously saved list
    if ( savedInstanceState != null ) {
        settingList = (ArrayList < SettingCheckBox >) savedInstanceState.getSerializable ( SETTING_CHECK_BOX );
    }
    // ...
}

         protected void onActivityResult ( int requestCode , int resultCode , Intent data ) {
            if ( resultCode != RESULT_OK || data == null )
                return;
            settingList = (ArrayList < SettingCheckBox >) data.getSerializableExtra ( SETTING_CHECK_BOX );

    //how can I log print the list of items that have been checked
    // What should go here ? such that i can do other things after getting a list of items that were checked ?

     //This is my try

            Object[] mStringArray = settingList.toArray();

               for(int i = 0; i < mStringArray.length ; i++){
               Log.d("***Checked items*",(String)mStringArray[i]);
         }

        }

【问题讨论】:

  • 我认为data.getSerializableExtra ( SETTING_CHECK_BOX ); 在检索数据时很好。如果您决定继续它,请再次尝试我的答案(在迭代时添加检查器if settingList.get(i).isChecked())。我很确定这是正确的。干杯!
  • Log.i("***Context Menu*", String.valueOf(settingList.get(i).getChecked())); 给了我所有列表为 true 已检查和 false 未检查。现在,尝试使用 if else 语句获取描述。
  • 是的。只需将if else 声明放在我之前的评论中提到的答案中即可。我认为到那时一切都好。干杯! :D

标签: java android submenu


【解决方案1】:

您是否从该代码中得到任何错误?如果不是,则意味着您的settingList 已使用来自data.getSerializableExtra ( SETTING_CHECK_BOX ); 的解析值正确初始化,这是SettingCheckBox 对象的列表。从您提供的链接中,包含SettingCheckBox 对象类的代码。您如何处理对象内的数据取决于您的用例。


编辑:回应 cmets。

如果 names 是指 SettingCheckBox 文本描述,则可以像这样直接遍历 settingList

for(int i = 0; i < settingList.size(); i++){
    Log.d("***Checked items*", settingList.get(i).getDescription());
}

【讨论】:

  • 我已经在 //this is my try 下更新了我的代码。基本上我想要所有被检查的项目的名称。
  • 是的,我所说的名称是指 SettingCheckBox 中的文本描述,使用您提供的代码,我只需获取我最初添加到 ArrayList 中的所有项目,无论它们的状态如何(选中或未选中)。请检查我的编辑。我希望你能帮我拿到检查过的东西。
  • @choman 我明白了。然后您可以使用SettingCheckBox -- getChecked() 的getter 函数。在迭代中,添加if 语句。如果true,打印描述。
  • @McAwesomeville,嘿!谢谢提示。我目前正在研究它,但因为我无法产生结果。所以,我现在正在关注本教程 eugeneandroid.blogspot.com/2014/12/… 。我正在尝试获得类似于 Mainactivity 下 button.setOnClickListener 的 Toast 的结果。但是,我无法在我的项目中复制结果。
  • 我相信数据已经在protected void onActivityResult ( int requestCode , int resultCode , Intent data Intent data下)你能帮我找回它吗?
【解决方案2】:

@McAwesomville ,嘿,谢谢你的所有帮助。得到它的工作!这是我根据您的建议提出的代码 :) 干杯!

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK || data == null)
            return;
        settingList = (ArrayList<SettingCheckBox>) data.getSerializableExtra(SETTING_CHECK_BOX);

        for (int i = 0; i <settingList.size(); i++){
            if (settingList.get(i).getChecked()){
                Log.d("**Checked Item**",String.valueOf(settingList.get(i).getDescription()));
            }
        }


    }

【讨论】:

  • 欢迎您。出色地。这与我的答案相似。加上 cmets 中的细节。无论如何。您应该选择一个接受的答案。你可以接受你自己的答案或我的答案。只是将其标记为正确回答。干杯! :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-18
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多