2016-05-30 61 views
0

我正在使用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]); 
     } 

     } 
+0

我觉得'data.getSerializableExtra(SETTING_CHECK_BOX);'在检索数据时很好。如果您决定继续使用它,请再次尝试我的答案(在迭代过程中添加检查器if settingList.get(i).isChecked()')。我很确定这是正确的。干杯! –

+1

'Log.i(“***上下文菜单*”,String.valueOf(settingList.get(i).getChecked()));'给我所有的列表为true,其中检查了错误而不是。现在,尝试使用if else语句来获取描述。 – choman

+1

是的。就像我在我的回答中我之前的评论中提到的那样,放置'if else'语句。而且我认为那时候一切都好。干杯! :D –

回答

1

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


编辑:为了应对的意见。

如果,你的意思是SettingCheckBox文字说明,你可以在你的settingList迭代直接像这样:

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

我已经更新了我的代码//这是我的尝试。基本上我想要检查所有项目的名称。 – choman

+0

@choman看我的编辑。 –

+0

是的,通过名称我的意思是SettingCheckBox中的文本描述,使用您提供的代码,我只需获取最初添加到ArrayList中的所有项目,而不考虑它们的状态(选中或未选中)。请检查我的编辑。我希望你能帮我弄清楚检查过的物品。 – choman

0

@McAwesomville,嘿嘿谢谢所有的help.Got它的工作!这是你的建议后提出的代码:)干杯!

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())); 
      } 
     } 


    } 
+0

欢迎您。好。这与我的答案类似。加上评论中的细节。无论如何。你应该选择一个被接受的答案。你可以接受你自己的答案或我的答案。只是将其标记为正确回答。干杯! :d –

相关问题