该接口不适用于该片段

时间:2017-05-29 14:36:25

标签: android android-fragments

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

1 个答案:

答案 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());
        }}
  1. 在活动中创建方法
  2. 调用Adapter
  3. 中的onClick函数方法