Returning values from multiple selection ListView

前端 未结 4 806
一个人的身影
一个人的身影 2021-02-08 14:25

Edit: Okay, I found a solution. Don\'t know that it\'s the proper solution, but it does work correctly. Added to the code below.

I\'m trying to allow a user to select a

相关标签:
4条回答
  • 2021-02-08 14:48

    Did some more debugging and found a solution that worked for me. Edited into code above. For some reason, the SparseBooleanArray doesn't empty itself; it maintains the keys of the boxes that have been checked. When getCheckedItemPositions() is called, however, it sets the VALUE to false. So the key is still in the returned array, but it has a value of false. Only the checked boxes will be marked with a value of true.

    0 讨论(0)
  • 2021-02-08 14:48

    didn't mean to do this as an answer but i had to expand on what you did to do multi select. Why did you do a field variable for your selections? i just did local SparseBooleanArray...

    public class NaughtyAndNice extends ListActivity {
    TextView selection;
    String[] items={"lorem","ipsum", "dolor", "sit", "amet",
            "consectetuer", "adipisc", "jklfe", "morbi", "vel",
            "ligula", "vitae", "carcu", "aliequet"};
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,items));
               selection = (TextView)findViewById(R.id.selection);
        this.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    }
    
    public void onListItemClick(ListView parent, View view, int position, long id){
        SparseBooleanArray choices = parent.getCheckedItemPositions();
        StringBuilder choicesString = new StringBuilder();
        for (int i = 0; i < choices.size(); i++)
        {
        //added if statement to check for true. The SparseBooleanArray
        //seems to maintain the keys for the checked items, but it sets
        //the value to false. Adding a boolean check returns the correct result.                    
            if(choices.valueAt(i) == true)
                choicesString.append(items[choices.keyAt(i)]).append(" ");
    
        } 
        selection.setText(choicesString);
    }
    }
    

    0 讨论(0)
  • 2021-02-08 15:07

    No need to use SparseBooleanArray choices = parent.getCheckedItemPositions();

    StringBuilder is enough for this.

    0 讨论(0)
  • 2021-02-08 15:08

    I know you found a solution that works for you, but the cleaner and simpler solution that will probably work most of the time is this (I want to persist all the ids of the elements selected):

    (in my ListActivity):

    SparseBooleanArray selectedPos = getListView()
            .getCheckedItemPositions();
    
    ListAdapter lAdapter = getListAdapter();
    List<Long> ids = new ArrayList<Long>();
    for (int i = 0; i < lAdapter.getCount(); i++) {
        if (selectedPos.get(i)) {
            ids.add(lAdapter.getItemId(i));
        }
    }
    
    0 讨论(0)
提交回复
热议问题