1

我正在使用自定义回收视图,并且在适配器类中,我实现了在按钮单击时始终为空的接口。这是我的适配器类。接口值始终为空

public class FeedListAdapter extends 
    RecyclerView.Adapter<AddtoCartHolder> { 

private OnFeedItemClickListener onFeedItemClickListener; 
public FeedListAdapter(Activity activity, ArrayList<CartItem> feedItems) { 
    this.activity = activity; 
    this.feedItems = feedItems; 
    this.filteredfeedItems = feedItems; 

    inflater = LayoutInflater.from(activity); 
} 

public void setOnFeedItemClickListener(OnFeedItemClickListener onFeedItemClickListener) { 
     this.onFeedItemClickListener = onFeedItemClickListener; 
    } 

@Override 
public AddtoCartHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(
      R.layout.feed_item, parent, false); 
    AddtoCartHolder viewHolder = new AddtoCartHolder(v); 
    setupClickableViews(v, viewHolder); 
    return viewHolder; 
} 
@Override 
public void onBindViewHolder(final AddtoCartHolder holder, int position) { 

    CartItem item = (CartItem) filteredfeedItems.get(position); 
    holder.price.setText((String.valueOf(item.getProductName()) + "")); 
    holder.location.setText((String.valueOf(item.getQuantity())) + ""); 


} 

private void setupClickableViews(final View view, final AddtoCartHolder cellFeedViewHolder) { 
    cellFeedViewHolder.plus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(onFeedItemClickListener !=null){ 
       onFeedItemClickListener.onAddClick(v, cellFeedViewHolder.getAdapterPosition()); 
       } 
       else{ 
        Toast.makeText(activity, "Data is null", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
} 

public interface OnFeedItemClickListener { 
     void onAddClick(View v, int position); 

    } 

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

我总是越来越空,只要在按钮点击真是倒知道为什么它是未来空...

这里是一个已经实现的接口我的片段类。

public class MyFragment extends Fragment implements FeedListAdapter.OnFeedItemClickListener{ 

// the method 
@Override 
public void onAddClick(View v, int position) { 
    // TODO Auto-generated method stub 
    Snackbar.make(clContent, "Product removed from cart!", 
      Snackbar.LENGTH_SHORT).show(); 
} 
+2

你在哪里调用'setOnFeedItemClickListener'?您需要调用它,否则您的侦听器将始终为空。 – Patrick

+0

先生,你会建议我在哪里添加此代码.. – Nitesh

+0

当然让我为你写一个答案。 – Patrick

回答

1

您必须在您的片段中实例化一个FeedListAdapter正确的好友???

喜欢使用的语句:

FeedListAdapter adapter = new FeedListAdapter(this.getActivity(),your_array_list) 

实例适配器只是'this'打电话给你的适配器的setOnFeedItemClickListener作为参数:)这之后一切都:)

adapter.setOnFeedItemClickListener(this) 

希望我的回答帮你:)快乐编码哥们:)

+0

你是对的这是我忘了添加感谢兄弟的问题.. – Nitesh

+0

@NiteshKumar:很高兴你解决了它的朋友:)快乐编码:) –

+0

嗨,兄弟你能告诉我如何设置文本到适配器的文本从活动? – Nitesh

1

通过外观你没有设置你的听众。因此,onFeedItemClickListener总是null

MyFragment实际上并没有做任何事情,你有没有膨胀的观点,覆盖onCreateView(...)

还有,你绝对可以改变,以提高您的执行几件事。但要让听众工作:

  1. 只要摆脱MyFragment你似乎没有正确使用它。
  2. 将您的implements FeedListAdapter.OnFeedItemClickListener移动到您的Activity。即使您的活动实施您的OnFeedItemClickListener界面而不是MyFragment(它似乎没有做任何事情)。
  3. FeedListAdapter设置在其构造听众:

    public FeedListAdapter(Activity activity, ArrayList<CartItem> feedItems) 
    { 
        this.activity = activity; 
        // Assume we the activity implements OnFeedItemClickListener 
        setOnFeedItemClickListener((OnFeedItemClickListener)activity); 
        this.feedItems = feedItems; 
        this.filteredfeedItems = feedItems; 
        inflater = LayoutInflater.from(activity); 
    } 
    

请记住,这是一个非常糟糕的实现,你可以在它但对这个问题的目的肯定提高,这就足够了。

+0

感谢您的意见是啊,它帮助.... – Nitesh

+1

没有后顾之忧,告诉我,如果它工作:) – Patrick

+0

是啊,它帮助..谢谢 – Nitesh