【问题标题】:Interface value is always null接口值始终为空
【发布时间】:2016-08-18 10:17:42
【问题描述】:

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

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

【问题讨论】:

  • 你在哪里打电话给setOnFeedItemClickListener?您需要调用它,否则您的侦听器将始终为空。
  • 先生,您能建议我在哪里添加此代码..
  • 当然让我为你写一个答案。

标签: java android android-fragments interface android-recyclerview


【解决方案1】:

您必须在片段正确的伙伴中实例化 FeedListAdapter ???

like using 语句:

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

在实例化您的适配器后,只需调用您的适配器的 setOnFeedItemClickListener 并使用 'this' 作为参数 :) 就是这样 :)

adapter.setOnFeedItemClickListener(this)

希望我的回答对你有所帮助 :) 祝你编程愉快 :)

【讨论】:

  • @NiteshKumar : 很高兴你解决了这个问题 :) 编码愉快 :)
  • 嗨,兄弟,你能告诉我如何从活动中将文本设置为适配器的文本视图吗?
  • 您的意思是在 listView 中将文本设置为单元格吗? :) 适配器没有自己的视图兄弟 :) 它只是您 listView 的数据源 :) 它为您的 listview 提供数据并返回每个单元格的视图 :)
  • 好的,可以这样做吗?
  • 为什么要更新或设置活动单元格的文本?没有多大意义,而且设计也很糟糕,伙计:) 而你可以做的是修改适配器的数组列表并在其上调用 adapter.notifyDataSetChanged() 伙计:) 它不能解决你的目的吗:)跨度>
【解决方案2】:

从外观上看,您并没有设置您的听众。因此,onFeedItemClickListener 始终是 null

此外,MyFragment 实际上并没有做任何事情,您还没有夸大视图、覆盖 onCreateView(...) 等。

您绝对可以更改一些内容来改进您的实施。但要让您的听众正常工作:

  1. 去掉MyFragment,你似乎没有正确使用它。
  2. 将您的implements FeedListAdapter.OnFeedItemClickListener 移至您的Activity。即让您的 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);
    }
    

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

【讨论】:

  • 是的,它有帮助.. 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 2010-12-09
  • 1970-01-01
  • 2011-06-09
  • 2015-12-04
  • 2021-08-22
相关资源
最近更新 更多