【问题标题】:Item checked when created in android listview在 android listview 中创建时检查的项目
【发布时间】:2014-02-20 12:18:06
【问题描述】:

我正在尝试为我的 android 应用程序创建一个警报系统,并且我有一个 listview,我正在其中添加 alamrs。这个listview 适配器是一个simple_list_item_multiple_choice。我希望当我添加警报时,这会显示为在listview 中选中,但我还没有找到解决方案。

这段代码没有像我预期的那样工作:

{
    ListView list = (ListView)findViewById(R.id.listView1);
    list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, this.alarmList);
    list.setAdapter(adapter); 
    list.setItemChecked(itemPos, true); 
}

你知道我还能尝试什么吗?

提前致谢。

【问题讨论】:

    标签: android checkbox android-listview


    【解决方案1】:

    multiple_choice.xml

    <CheckedTextView 
      xmlns:android="http://schemas.android.com/apk/res/android"     
    
      android:id="@+id/checkList" 
      android:paddingLeft="20dip" 
      android:paddingRight="20dip" 
      android:paddingTop="10dip"
      android:paddingBottom="10dip" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="?android:attr/listPreferredItemHeight"  
      android:gravity="center_vertical"  
      android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    

    在你的 java 文件中

    final ListAdapter ladapter=new ArrayAdapter<String>(getActivity(),
                         R.layout.multiple_choice, <string array>);
    
           listView.setAdapter(ladapter);
            listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                    listView.setItemChecked(2, true);
    

    这将设置要检查的列表视图中的第三项。

    【讨论】:

      【解决方案2】:

      老兄试试这个代码,我希望这就是你的意思:

      final SparseBooleanArray mSelectedItemsIds = new SparseBooleanArray();
      final  ListView list = (ListView)findViewById(R.id.listView1);
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,  android.R.layout.simple_list_item_multiple_choice, this.alarmList);
              list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
      
              list.setAdapter(adapter );
              list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                  @Override
                  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                      //SparseBooleanArray Checked = list.getCheckedItemPositions();
                      if(!mSelectedItemsIds.get(position)){
                         list.setItemChecked(position, true);
                          mSelectedItemsIds.put(position, true);
                      }
                      else{
                          mSelectedItemsIds.delete(position);
                          list.setItemChecked(position, false);
                      }
      
      
      
                  }
              });
      

      编辑:我将列表设置为最终列表,如果你没有这样做,请确保你也这样做,否则它将不起作用

      【讨论】:

      • 不,我认为这段代码是为了创建一个监听器,当一个项目被点击时,它会被选中或取消选中,但我需要的是当我创建它时该项目被选中
      • 啊,好吧,那么你需要一个 CustomAdapter 并检查 getView 方法
      • 那么没有别的选择了吗?我应该创建一个 CustomAdapter 吗?
      • 如果您想选择项目,是的,您应该更改适配器上的 getView 方法
      【解决方案3】:

      如果我没记错的话,你还是需要拨打adapter.notifyDataSetChanged()

      这会通知适配器更新列表的内容以显示您对其所做的更改。

      【讨论】:

      • 在您更新列表的数据集之后,是的,我会说将它放在您指定的代码之后。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多