如何使listview选中一个项目元素?

时间:2016-03-31 06:32:58

标签: android listview baseadapter

我正在使用BaseAdapter处理自定义Listview。在点击列表视图项目之后我面临一个小问题,即特定行被突出显示但在此之后如果我点击另一个列表项目它突出显示但仍旧旧版本它保持相同它不是进入它之前的状态。

我希望一次只能选择一个项目。

enter image description here

MainActivity.java

if (musicRealmResults.get(currentIndex).isSelected() == false) {
    musicRealmResults.get(currentIndex).setIsSelected(true);

    playSong(currentIndex, true);

    adapter.notifyDataSetChanged();
} else {
    musicRealmResults.get(currentIndex).setIsSelected(false);
    adapter.notifyDataSetChanged();
}

MusicAdapter.java

if (musicRealmResults.get(position).isSelected()) {

    Typeface tf = Typeface.createFromAsset(mContext.getAssets(), "fonts/fonts_bold.otf");
    holder1.albumsTextView.setTypeface(tf);

    holder1.equalizerView.setVisibility(View.VISIBLE);
    holder1.albumsImageView.setVisibility(View.INVISIBLE);
    holder1.equalizerView.animateBars();
} else {
    Typeface tf = Typeface.createFromAsset(mContext.getAssets(), "fonts/fonts_regular.otf");
    holder1.albumsTextView.setTypeface(tf);

    holder1.equalizerView.setVisibility(View.GONE);
    holder1.albumsImageView.setVisibility(View.VISIBLE);
    holder1.equalizerView.stopBars();
}

请仔细阅读我的帖子并建议我如何在列表视图行中选择和取消选择。

5 个答案:

答案 0 :(得分:1)

似乎您无法setSelected(false)您之前的项目。 请检查setChoiceMode()的{​​{1}},或者您可以将之前的项目重置为ListView

setSelected(false)

答案 1 :(得分:1)

遍历所有数组元素并将check state设置为false,然后将currentIndex设置为true。

MainActivity

for(int i =0 ; i < musicRealmResults.size() ; ++i){
   musicRealmResults.get(i).setIsSelected(false);
}

musicRealmResults.get(currentIndex).setIsSelected(true);

playSong(currentIndex, true);

adapter.notifyDataSetChanged();

答案 2 :(得分:1)

这也是一个不错的选择,如果你不想循环通过其余的位置来取消选择它们。

$sql1="SELECT id,name, meaning, alpha, gender FROM $country WHERE gender='$gender' AND alpha='$alpha' $limit";
    $query=mysqli_query($con,$sql1);    

while($rows=mysqli_fetch_array($query)){

        echo "<td><a href='meaning-of.php?name=$rows[name]'>".$rows['name']."</a></td>";
        echo "<td>".$rows['meaning']."</td>";
        echo "<td>".$rows['gender']."</td></tr>";
        }

答案 3 :(得分:0)

尝试以下代码:

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
        {
           if (musicRealmResults.get(position).isSelected() == false)
           {
              musicRealmResults.get(position).setIsSelected(true);

              playSong(position, true);

              adapter.notifyDataSetChanged();
           }
           else 
           {
              musicRealmResults.get(position).setIsSelected(false);
              adapter.notifyDataSetChanged();
           }

        }
    });

答案 4 :(得分:0)

您可以在model class中进行管理。只需使用Boolean isSelected进行切换getter and setter,当用户点击列表项时检查其是否已被选中,如果没有,则将其标记为已选择并更新模型类中的布尔值。

mListLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(list.get(position).getisSelected()){
                    // list item is already selected.
                    mListLayout.setBackgroundColor(Color.WHITE);  // normal color
                    list.get(position).setisSelected(false);
                }
                else{
                    // list item is not selected, make it selected
                    mListLayout.setBackgroundColor(Color.GRAY);  // selected color
                    list.get(position).setisSelected(true);
                }
                notifyDataSetChanged();
            }
        });