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