Android列表视图在适配器中更改项目选择状态

时间:2016-08-04 09:06:45

标签: android listview

我有ListView单选模式。当用户点击列表项并且它有效时,我进行集选择。现在我需要:

  1. 当用户点击ListView项目中的播放按钮时进行设置选择。
  2. 在我的ListView适配器中执行此操作。
  3. 取消选择上一项,然后选择用户点击播放按钮的项目。
  4. 我尝试了一些不同的解决方案但它们无法正常工作。 在某些情况下,我进行多选,在某些情况下,我无法选择项目。 enter image description here

      

    XML

    <ListView
        android:id="@+id/menu_list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/listen_price_button"
        android:background="@color/rose"
        android:paddingBottom="5dp"
        android:paddingLeft="11dp"
        android:paddingRight="11dp"
        android:paddingTop="10dp"
        android:scrollbars="none"
        android:drawSelectorOnTop="false"
        android:choiceMode="singleChoice"
        />
    
      

    活动中使用的选择代码(工作正常)

    // handle click on list view item
    listMenu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            view.setSelected(true);
            setDetailsData(position);
            mSelectedPosition = position;
        }
    });
    
      

    在适配器中播放按钮代码

    viewHolder.playImage.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Listen currentItem = mListenList.get(position);
                if (currentItem.isPurchased() || currentItem.isFree()) {
                    Intent intent = new Intent(mContext, ListenDetailActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.putExtra("listen_item", currentItem);
                    intent.putExtra("listen_list", mListenList);
                    mContext.startActivity(intent);
                } else {
                    try {
                        mHelper.launchPurchaseFlow((Activity) mContext, currentItem.getSku(), 1001,
                                mPurchaseFinishedListener, "");
                    } catch (IabHelper.IabAsyncInProgressException e) {
                        Log.e(TAG, "Error launching purchase flow. Another async operation in progress.");
                    }
                }
            }
    });
    

    我试图在播放按钮上添加它并且它不起作用

     list.clearChoices();
        list.requestLayout();
        finalConvertView.setSelected(true);
    

    如果我只添加finalConvertView.setSelected(true);,则会进行多选

    我还试图取消选择所有选择一个,但它也不起作用

     for ( int i=0; i< list.getCount(); i++ ) {
    
                       list.setItemChecked(i, false);
    
      }
    finalConvertView.setSelected(true);
    

1 个答案:

答案 0 :(得分:0)

你的意思是你的playImage不起作用?尝试在XML中为'playImage'添加以下内容

android:focusable="false"

也尝试添加:

android:descendantFocusability="blocksDescendants"

在listview上项目的顶级布局。