Java 接口值始终为空

Java 接口值始终为空,java,android,android-fragments,interface,android-recyclerview,Java,Android,Android Fragments,Interface,Android Recyclerview,我使用的是自定义回收器视图,在适配器类中,我实现了一个在单击按钮时始终为空的接口。这是我的适配器类 public class FeedListAdapter extends RecyclerView.Adapter<AddtoCartHolder> { private OnFeedItemClickListener onFeedItemClickListener; public FeedListAdapter(Activity activity, ArrayList&l

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

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();
}

您必须在片段中实例化FeedListAdapter,对吗

如使用语句:

FeedListAdapter adapter = new FeedListAdapter(this.getActivity(),your_array_list)
实例化适配器后,只需调用适配器的setOnFeedItemClickListener,并将
'this'
作为参数:)仅此而已:)


希望我的回答对你有所帮助:)快乐的编码伙伴:)

从你没有给你的听众设置的东西来看。因此,
onFeedItemClickListener
总是
null


另外,
MyFragment
实际上没有做任何事情,您没有膨胀视图,没有覆盖
onCreateView(…)
,等等

有几件事你可以改变来改进你的实现。但是为了让你的听众工作:

  • 只要去掉
    MyFragment
    你似乎没有正确使用它
  • 移动您的
    实现FeedListAdapter。在FeedItem上单击Listener
    到您的
    活动。i、 e.让您的活动实现您的<代码>OnFeedItemClickListener
    界面,而不是
    MyFragment
    (它似乎没有做任何事情)
  • Make
    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);
    }
    
    公共FeedListAdapter(活动活动,ArrayList feedItems)
    {
    这个。活动=活动;
    //假设我们在FeedItemClickListener上实现了活动
    setOnFeedItemClickListener((OnFeedItemClickListener)活动);
    此项。feedItems=feedItems;
    this.filteredfeedItems=饲料项目;
    充气机=从(活动)开始的充气机;
    }
    

  • 请记住,这是一个非常糟糕的实现,您肯定可以对其进行改进,但就本问题而言,这已经足够了。

    您将
    setOnFeedItemClickListener
    称为哪里?您需要调用它,否则您的侦听器将始终为空。先生,您能建议我在何处添加此代码吗..当然,让我为您写一个答案。@NiteshKumar:很高兴您解决了它,伙计:)快乐编码:)嗨,兄弟,您能告诉我如何从“活动”中将文本设置为适配器的文本视图吗?您的意思是在listView中将文本设置为单元格吗巴迪??:)适配器本身没有视图bro:)它只是listView的一个数据源:)它向listView提供数据并返回每个单元格的视图:)好的,这样就可以了。?为什么要更新或设置活动中单元格的文本???没有多大意义,设计也很糟糕,巴迪:)相反,你可以做的是修改适配器和调用适配器的数组列表。它上面的notifyDataSetChanged()巴迪:)它不会解决你的目的:)是的,它有帮助。。谢谢
    adapter.setOnFeedItemClickListener(this)
    
    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);
    }