我有2个列表的“通用”适配器,一个用于卖家名称,另一个用于产品名称,当点击列表中的任何项目时我正确地在onClick方法中接收位置,但是当我想要时通过listener.onClickPosition方法发送永远不会到达片段。即,如果片段没有实现接口,则为as。
注意我的片段在viewpager中我不知道它是否会影响任何内容
我的适配器
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);
}
}
我的片段
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");
}
}
}
}
答案 0 :(得分:2)
我没有使用界面的临时解决方案
public void itemPosition(int position) {
Log.d("Position",position+"");
}
@Override
public void onClick(View v) {
if(context instanceof ListSellerActivity) {
((ListSellerActivity)context).itemPosition(getAdapterPosition());
}}