2017-05-29 2 views
1

Ich habe einen "generischen" Adapter für 2 Listen, eine für den Namen des Verkäufers und eine andere für den Namen der Produkte, wenn ich auf einen beliebigen Punkt in der Liste ich richtig die Position in Die onClick-Methode jedoch, wenn ich senden will Die Methode listener.onClickPosition erreicht niemals das Fragment. dh es ist wie, wenn das Fragment die Schnittstelle nicht implementiert.Die Schnittstelle funktioniert nicht auf das Fragment

Hinweis mein Fragment ist in einem viewpager Ich weiß nicht, ob es etwas

Mein Adapter

public class AdapterRecyclerView extends 
RecyclerView.Adapter<AdapterRecyclerView.AdapterRecyclerViewViewHolder>{ 
private static Context context; 
private List items; 
private String type; 
private static OnClickAdapterRecyclerView listener; 


public AdapterRecyclerView(List items, Fragment fragment,String type) { 
    this.items = items; 
    this.type =type; 
    listener = (OnClickAdapterRecyclerView) fragment; 
} 


@Override 
public AdapterRecyclerViewViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view=null; 
    context=parent.getContext(); 
    switch (type){ 
     case SELLER:{ 
      view = LayoutInflater.from(parent.getContext()).inflate(R.layout.seller_card, parent, false); 
      break; 
     } 
     case PRODUCTS:{ 
     ... 
     } 

    } 
    AdapterRecyclerViewViewHolder adapter = new AdapterRecyclerViewViewHolder(view); 
    return adapter; 
} 

@Override 
public void onBindViewHolder(AdapterRecyclerViewViewHolder holder, int position) { 

    switch (type){ 
     case SELLER:{ 
      Seller seller = (Seller) items.get(position); 
      holder.binItem(seller); 
      break; 
     } 
     case PRODUCTS:{ 
     ... 
     } 
    } 
} 

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

public static class AdapterRecyclerViewViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public TextView textViewNameProduct; 
    public TextView textViewNameSeller; 


    public AdapterRecyclerViewViewHolder(View v) { 
     super(v); 
     v.setOnClickListener(this); 
     switch (v.getId()){ 
      case R.id.seller_card:{ 
       textViewNameSeller = (TextView) v.findViewById(R.id.textViewNameSeller); 
       break; 
      } 
      case R.id.products_card:{ 
      ... 
      } 

     } 

    } 

    public void binItem(Seller seller){ 
     textViewNameSeller.setText(product.getName()); 
    } 

    public void binItem(Product product){ 
    ... 
    } 

    @Override 
    public void onClick(View v) { 
     //The position is printed correctly 
     Log.d("Position",getAdapterPosition()+""); 
     //Here this call does not work 
     listener.onClickPosition(getAdapterPosition()); 
    } 
} 

public interface OnClickAdapterRecyclerView{ 
    void onClickPosition(int pos); 
} 
} 

Mein Fragment

public class SellerListFragment extends Fragment implements AdapterRecyclerView.OnClickAdapterRecyclerView { 


public static final String SELLER="SELLER"; 


@BindView(R.id.recyclerViewSeller) 
protected RecyclerView recyclerView; 

private ArrayList<Seller>sellers; 

private AdapterRecyclerView adapterSeller; 

private OnSelectedSellerListener listener; 

public SellerListFragment() { 

} 

public static SellerListFragment newInstance() { 
    SellerListFragment fragment = new SellerListFragment(); 
    Bundle bundle = new Bundle(); 
    fragment.setArguments(bundle); 
    return fragment; 
} 


@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    sellers = new ArrayList<>(); 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view =inflater.inflate(R.layout.fragment_seller_list, container, false); 
    ButterKnife.bind(this, view); 
    return view; 
} 



@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    adapterSeller = new AdapterRecyclerView(sellers,SellerListFragment.this,SELLER); 
    recyclerView.setAdapter(adapterSeller); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); 

} 


@Override 
public void onClickPosition(int pos) { 
//Never called does not work 
    listener.onSelectedSellerListener(pos,sellers); 
} 


public interface OnSelectedSellerListener { 

    void onSelectedSellerListener(int position, ArrayList<Seller> seller); 
} 


@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    Activity activity; 
    if (context instanceof Activity) { 
     activity = (Activity) context; 
     try { 
      listener = (OnSelectedSellerListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + "implement OnSelectedSellerListener"); 
     } 
    } 
} 
} 

Antwort

1

Meine temporäre Lösung beeinflusst, ohne die Schnittstelle

public void itemPosition(int position) { 
    Log.d("Position",position+""); 
} 


@Override 
    public void onClick(View v) { 
     if(context instanceof ListSellerActivity) { 
     ((ListSellerActivity)context).itemPosition(getAdapterPosition()); 
     }} 
  1. Erstellen Sie eine Methode in der Tätigkeit
  2. Rufen Sie die Methode onClick Funktion in Adapter
Verwandte Themen