2016-08-04 9 views
0

Ich habe ListView mit Single-Choice-Modus. Ich mache die Auswahl, wenn der Benutzer auf ein Listenelement klickt und es funktioniert. Jetzt muss ich:Android listview ändern Element ausgewählten Zustand in Adapter

  1. machen Sie die Auswahl, wenn der Benutzer auf die Wiedergabetaste in ListView Element klickt.
  2. tun Sie es in meinem ListView Adapter.
  3. heben Sie die Auswahl des vorherigen Elements auf und wählen Sie das Element aus, auf das der Benutzer auf die Schaltfläche Abspielen geklickt hat.

Ich habe ein paar verschiedene Lösungen ausprobiert und sie funktionieren nicht. In einigen Fällen mache ich Mehrfachauswahl und in einigen Fällen kann ich kein Element auswählen. 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" 
    /> 

Code Auswahl in der Aktivität verwendet (funktioniert)

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

Play-Taste Code in Adapter

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."); 
       } 
      } 
     } 
}); 

, was ich auf Play-Taste hinzuzufügen versucht und es

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

wenn ich finalConvertView.setSelected(true); hinzufügen funktionieren sie nicht nur Multiselect

auch versucht, ich mache alle auszuwählen dann abzuwählen aber es funktioniert auch nicht

for (int i=0; i< list.getCount(); i++) { 

        list.setItemChecked(i, false); 

    } 
finalConvertView.setSelected(true); 

Antwort

0

Sie meinen, dass Ihre p LayImage hat nicht funktioniert? Versuchen Sie, diese folgenden in XML hinzufügen zu 'playImage'

android:focusable="false" 

auch versuchen, diese hinzuzufügen:

android:descendantFocusability="blocksDescendants" 

auf der obersten Ebene Layout Artikel auf Listenansicht.

+1

mein Bild funktioniert, aber ich kann Setselection der gesamten Itemview nicht machen, wenn ich auf Play-Taste klicke. – Adnan

+0

Von click listener versuchen Sie Folgendes zu verwenden: ((ListView) parent) .setItemChecked (position, true), um das aktuelle Element in ListView festzulegen – alway5dotcom

Verwandte Themen