2016-12-22 2 views
1

Ich möchte die Eigenschaft eines der Elemente in RecyclerView überprüfen. Um genauer zu sein, möchte ich überprüfen, ob dieser Artikel ausgewählt ist.Überprüfen Sie, ob der Artikel in Recycleransicht ausgewählt

Zunächst wähle ich den Artikel

onView(withId(R.id.list_master)) 
      .perform(
        RecyclerViewActions.actionOnItemAtPosition(14, clickAnItem(R.id.layout_menu)) 
      ); 

Zweitens prüfen, ob das spezifische Element ausgewählt ist:

 onView(allOf(withId(R.id.layout_menu), hasDescendant(withText("SO")))) 
      .check(matches(isSelected())); 

Mit benutzerdefinierten Matcher:

private static Matcher<View> isSelected() { 
    return new TypeSafeMatcher<View>() { 
     @Override 
     protected boolean matchesSafely(View item) { 

      return item.isSelected(); 
     } 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("Selected property"); 
     } 
    }; 

Leider der Zustand dieser Ansicht ist nicht ausgewählt, aber UI zeigt es erfolgreich als ausgewähltes Element markiert. Implementierungsdetails

Antwort

2

Überprüfen Sie diesen Code Ich hatte das gleiche wollen Sie überprüfen möchten, ob das Feld in Recycler View ausgewählt ist oder nicht.

public class AutoWithRuleListListAdapter extends RecyclerView.Adapter<AutoWithRuleListListAdapter.ViewHolder> { 

private Context context; 
private Fragment fragment; 
private ArrayList<ObjGetLookupDataResponseIn> lookupData; 


public AutoWithRuleListListAdapter(Context context, Fragment fragment, ArrayList<ObjGetLookupDataResponseIn> lookupData) { 
    this.context = context; 
    this.fragment = fragment; 
    this.lookupData = lookupData; 

} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.auto_withdraw_ben_name_list, parent, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) { 
    String output = lookupData.get(position).getDisplayName().substring(0, 1).toUpperCase() + lookupData.get(position).getDisplayName().substring(1); 
    holder.radioBen.setText(output); 
    holder.radioBen.setOnCheckedChangeListener(null); 
    holder.radioBen.setChecked(lookupData.get(position).isSelected()); 

    holder.radioBen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      resetAll(); 
      lookupData.get(position).setSelected(true); 
      notifyDataSetChanged(); 
      ((AutoViewRuleFragment)fragment).ruleName(position); 
     } 
    }); 


} 

private void resetAll() { 
    for (int i=0;i<lookupData.size();i++) 
    { 
     lookupData.get(i).setSelected(false); 
    } 
    notifyDataSetChanged(); 
} 


@Override 
public int getItemCount() { 
    return lookupData.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 
    RadioButton radioBen; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     radioBen = (RadioButton) itemView.findViewById(R.id.radioReceivesFunds); 
     radioBen.setTypeface(Utils.gothamMedium); 

    } 
}} 

rulename Methode in meinem Fragment, durch die bekomme ich die Position der view.Add boolean in Ihrem POJO ausgewählt, wenn dieses Element ausgewählt ist oder nicht. Hope this help.Happy Coding.Vote, wenn Sie es nützlich finden.

+0

Vielen Dank, aber meine Frage bezieht sich auf den Espressotest. Leider ist diese Antwort irrelevant – Gleichmut

Verwandte Themen