0

私はこのようなものがあります:私のRecyclerViewを更新するRecyclerView.ViewHolderのRecyclerView.AdapterのArrayListを更新しますか?私のMainActivityで

recyclerAdapter = new RecyclerAdapter(this, arrayList); 
recyclerView.setAdapter(recyclerAdapter); 

を、私はない:

Item item = new Item(); 
item.setId(id); 
item.setMessage(message); 

arrayList.set(position, item); 
recyclerAdapter.notifyItemChanged(position); 

(あまりにも、MainActivityに)私はすべてのRecyclerViewリスト項目内のボタンを持つようにしたいです現在のエントリを有効または無効にすることができます。したがって、私は現在のトグル状態を取得する必要があります。

私の問題は、どのように私のViewHolder内からMainActivityのRecyclerViewを更新できますか? RecyclerView.ViewHolder:

public class SetViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{//, View.OnLongClickListener{ 
public ImageView toggle; 

public SetViewHolder(View itemView){ 
    super(itemView); 
    toggle = (ImageView) itemView.findViewById(R.id.img_main_card_toggle); 
    toggle.setOnClickListener(this); 
} 


@Override 
public void onClick(View v) { 
    if (v.getId() == toggle.getId()) { 
     int clicked_position = getAdapterPosition(); 
     //TODO update Item of RecyclerView of MainActivity 
    } 
} 

マイRecycler.Adapter:

public class RulesAdapter extends RecyclerView.Adapter<SetViewHolder>{ 
private Activity activity; 
List<Item> items = Collections.emptyList(); 
private OnTapListener onTapListener; 
public RulesAdapter(Activity activity, List<Item> items){ 
    this.activity = activity; 
    this.items = items; 
} 

@Override 
public SetViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rules_list_item,parent,false); 
    return new SetViewHolder(view); 
} 

@Override 
public void onBindViewHolder(SetViewHolder holder, final int position) { 
    holder.recevied_message.setText(items.get(position).getReceived_message()); 
    holder.reply_message.setText(items.get(position).getReply_message()); 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(onTapListener != null){ 
       onTapListener.OnTapView(position); 
      } 
     } 
    }); 
} 

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

public void setOnTapListener(OnTapListener onTapListener){ 
    this.onTapListener = onTapListener; 
} 

}

+0

'ViewHolder 'から' notifyItemChanged 'を呼び出す –

+0

MainActivityのarrayListに項目を追加してnotifyItemChanged()を呼び出すと、それはrecyclerviewに表示されません。アダプタで使用されるarrayListを更新することができます –

+0

しかし、ViewListからArrayListを更新するにはどうすればいいですか?どのように私はそれにアクセスするのですか? – Panther

答えて

1

Interfaceを定義します。

public interface OnRecyclerItemToggleClickListener { 

    void onToggleClick(int adapterPosition); 
} 

adapterに実装してください。 onCreateViewHolderコールバックのセッターメソッドを使用して、アダプタインスタンスをViewHolderに渡します。お使いのアダプタで

public class SetViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{//, View.OnLongClickListener{ 
    public ImageView toggle; 
    private OnRecyclerItemToggleClickListener listener; 

    public SetViewHolder(View itemView){ 
     super(itemView); 
     toggle = (ImageView) 
     itemView.findViewById(R.id.img_main_card_toggle); 
     toggle.setOnClickListener(this); 
    } 


    public void setRecyclerItemToggleClickListener(OnRecyclerItemToggleClickListener listener) { 
     this.listener = listener; 
    } 

    @Override 
    public void onClick(View v) { 
     if (v.getId() == toggle.getId()) { 
      int clicked_position = getAdapterPosition(); 


     //TODO update Item of RecyclerView of MainActivity 

     listener.onToggleClick(clicked_position); 
    } 
} 

@Override 
public SetViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rules_list_item,parent,false); 
    SetViewHolder holder = new SetViewHolder(view); 
    holder.setOnRecyclerItemToggleClickListener(this); 
    return holder; 
} 

@Override public void onToggleClick(int adapterPosition) { 
    // you will get the callback here when the toggle button is clicked. 
    // you can update the ArrayList here. 
    // Or similarly, call an interface method to Activity. 
} 

トグルをクリックしたときにViewHolderからこのonToggleClickメソッドを呼び出します。 adapterにコールバックし、ArrayListを更新できます。それ以外の場合は、別の類似のInterfaceを使用して、アダプタからActivityにコールバックすることができます。

+0

私はそれを取得しません。もう少し詳しくお聞かせください。このonClickメソッドをどのように呼び出す必要がありますか? – Panther

+0

答えにさらにコードを追加しました。 – Bob

関連する問題