1

私はカスタムリサイクラビューを使用しています。アダプタクラスでは、ボタンをクリックすると常にnullが実装されています。ここに私のアダプタクラスがあります。ボタンをクリックするたびに、私は常にnullを取得していますインタフェースの値は常にnullです

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'はどこで呼びますか?それ以外の場合は、リスナーを常にnullにする必要があります。 – Patrick

+0

先生、このコードをどこに追加すればよいか教えてください。 – Nitesh

+0

確かに答えを書きましょう。 – Patrick

答えて

1

フラグメントの正しいバディにFeedListAdapterをインスタンス化する必要がありますか?

文で使用して同じように:ちょうどそれ:)引数として'this'であなたのアダプタのsetOnFeedItemClickListenerを呼び出して、アダプタのインスタンスを作成した後

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

をすべて:)

adapter.setOnFeedItemClickListener(this) 

が私の答えはあなたを助けたホープコーディング:)ハッピーですバディ:)

+0

これは問題だと私は感謝の仲間を追加することを忘れていました。 – Nitesh

+0

@NiteshKumar:あなたはそれをバディに解決してうれしく思います:)幸せなコーディング:) –

+0

こんにちは、私はどのようにテキストをアクティブからアダプタのtextviewに設定できますか? – Nitesh

1

あなたのリスナーを設定していないものの外見で。したがって、onFeedItemClickListenerは常にnullです。

またMyFragmentは実際には何もされていない、あなたはなど、onCreateView(...)を上書きビューを膨らませていない

あなたは間違いなくあなたの実装を改善するために変更される可能性がいくつかあります。しかし、あなたのリスナーの作業を取得します

  1. ちょうどあなたがそれを正しく使用するためには表示されませんMyFragmentを取り除きます。
  2. implements FeedListAdapter.OnFeedItemClickListenerActivityに移動してください。つまり、あなたのアクティビティにMyFragmentではなくOnFeedItemClickListenerインターフェイスを実装してください(何もしていないようです)。
  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

関連する問題