2016-07-10 4 views
0

recycler viewの特定のアイテムをクリックすると、dialogを表示します。今私はこれを行う方法がわかりませんが、私は主な活動からinterfaceを使用することを検討していました。 adapterは項目(TextViewテキスト)をインターフェイスに渡し、メインアクティビティはパラメータ項目を受け入れ、それに基づいてダイアログを表示します。しかし、私はそれをどうやって行うのか分かりません。それともここアダプタを使用してリサイクラービューにあるアイテムに基づくダイアログを表示

RecyclerAdapter.java

public class RecyclerAdapter extends RecyclerView.Adapter { 
private List<String> mDataSet = new ArrayList<>(); 
private LayoutInflater mInflater; 
private final ViewBinderHelper binderHelper = new ViewBinderHelper(); 


public RecyclerAdapter(Context context, List<String> dataSet) { 
    mDataSet = dataSet; 
    mInflater = LayoutInflater.from(context); 

    // uncomment if you want to open only one row at a time 
    // binderHelper.setOpenOnlyOne(true); 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = mInflater.inflate(R.layout.row_list, parent, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder h, int position) { 
    final ViewHolder holder = (ViewHolder) h; 

    if (mDataSet != null && 0 <= position && position < mDataSet.size()) { 
     final String data = mDataSet.get(position); 

     // Use ViewBindHelper to restore and save the open/close state of the SwipeRevealView 
     // put an unique string id as value, can be any string which uniquely define the data 
     binderHelper.bind(holder.swipeLayout, data); 

     // Bind your data here 
     holder.bind(data); 
    } 
} 

@Override 
public int getItemCount() { 
    if (mDataSet == null) 
     return 0; 
    return mDataSet.size(); 
} 

/** 
* Only if you need to restore open/close state when the orientation is changed. 
* Call this method in {@link android.app.Activity#onSaveInstanceState(Bundle)} 
*/ 
public void saveStates(Bundle outState) { 
    binderHelper.saveStates(outState); 
} 

/** 
* Only if you need to restore open/close state when the orientation is changed. 
* Call this method in {@link android.app.Activity#onRestoreInstanceState(Bundle)} 
*/ 
public void restoreStates(Bundle inState) { 
    binderHelper.restoreStates(inState); 
} 

private class ViewHolder extends RecyclerView.ViewHolder { 
    private SwipeRevealLayout swipeLayout; 
    private View tickOffLayout; 
    private View infoLayout; 
    private View displayedText; 
    private TextView textView; 
    private CheckBox checkBox; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     swipeLayout = (SwipeRevealLayout) itemView.findViewById(R.id.swipe_layout); 
     tickOffLayout = itemView.findViewById(R.id.tickOff_layout); 
     infoLayout = itemView.findViewById(R.id.info_layout); 
     displayedText = itemView.findViewById(R.id.displayedItemOnRecyclerView); 
     textView = (TextView) itemView.findViewById(R.id.text); 
     checkBox = (CheckBox) itemView.findViewById(R.id.checkItem); 
    } 

    public void bind(String data) { 
/*   tickOffLayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(checkBox.isChecked()){ 
        Log.e("Checkbox", "IS CHECKED"); 
        textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
        tickOffLayout.setBackgroundColor(Color.parseColor("#52abff")); 
        notifyDataSetChanged(); 
       }else if(!checkBox.isChecked()){ 
        Log.e("Checkbox", "IS UNCHECKED"); 
        textView.setPaintFlags(textView.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG)); 
        tickOffLayout.setBackgroundColor(Color.parseColor("#d9d9d9")); 
        notifyDataSetChanged(); 
       } 
      } 
     });*/ 

     infoLayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       notifyDataSetChanged(); 
      } 
     }); 

     checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
       if(checkBox.isChecked()){ 
        Log.e("Checkbox", "IS CHECKED"); 
        textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
        tickOffLayout.setBackgroundColor(Color.parseColor("#52abff")); 
        displayedText.setBackgroundColor(Color.parseColor("#CCCCCC")); 
        notifyDataSetChanged(); 
       }else if(!checkBox.isChecked()){ 
        Log.e("Checkbox", "IS UNCHECKED"); 
        textView.setPaintFlags(textView.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG)); 
        tickOffLayout.setBackgroundColor(Color.parseColor("#d9d9d9")); 
        displayedText.setBackgroundResource(R.drawable.define_background); 
        notifyDataSetChanged(); 
       } 
      } 
     }); 
     textView.setText(data); 
    } 
} 

}

答えて

0

任意の別の方法がある場合は、あなたがViewHolderとViewAdapter正しい方法を設定しても、クリックするとDialogFragmentショーでのonClickを扱うことができる方法です。

private class SimpleTitleDataHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    /** 
    * View's elements 
    */ 
    private TextView mTitleTV; 

    // Good object instance 
    private String mTitle; 

    // Constructor 
    public SimpleTitleDataHolder(View itemView) { 
     super(itemView); 
     /** 
     * Set elements 
     */ 
     mTitleTV = (TextView) 
       itemView.findViewById(R.id.title); 
    } 

    @Override 
    public void onClick(View v) { 
     // Do anything 
     // Show dialog 
     DialogFragment dialogFragment = new DialogFragment(); 
     FragmentManager fm = getFragmentManager(); 
     dialogFragment.show(fm, "tag"); 
    } 

    /** 
    * Function to update view's elements 
    * @param user Good data to be updated to 
    */ 
    public void bindData(String title) { 
     mData = title; 
     mUserName.setText(title); 
    } 

} 


private class ActiveAuctionsDataAdapter extends RecyclerView.Adapter<BaseAuctionUserDataHolder> { 

    // Data list 
    private List<String> mDataList; 

    /** 
    * Constructor, which takes list of data and assigns it to local variable 
    * @param dataList 
    */ 
    public ActiveAuctionsDataAdapter(List<String> dataList) { 
     mDataList = dataList; 
    } 

    /** 
    * Define behaviour on creation 
    * @param parent Parent viewgroup 
    * @param viewType Type of view 
    * @return holder 
    */ 
    @Override 
    public BaseAuctionUserDataHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = LayoutInflater.from(getActivity()); 
     switch (viewType) { 
      case 1: 
       View itemView1 = inflater.inflate(R.layout.simple_title, parent, false); 
       return new SimpleTitleDataHolder(itemView1); 
     } 

     return null; 
    } 

    /** 
    * Event that happens on cell append 
    * @param holder Holder to append to 
    * @param position Position of the cell 
    */ 
    @Override 
    public void onBindViewHolder(BaseAuctionUserDataHolder holder, int position) { 
     User data = mDataList.get(position); 
     holder.bindData(data); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     /** 
     * Here you can dynamically determine what layout to inflate for each element of a RCV 
     */ 
     return 1; 
    } 

    /** 
    * Function to get number of items in list 
    * @return Number of items 
    */ 
    @Override 
    public int getItemCount() { 
     return mDataList.size(); 
    } 
} 
+0

私の質問は、どのように私はアイテムのための別のダイアログを表示するには、recyclerview onclickを取得するのですか?この例を考えてみましょう:私は3つのアイテム(これらのアイテムはarraylistで表示されています)を私のrecyclerviewリストに入れました。 2 |図3には、それぞれ「クリックされた項目1」、「クリック2」、「クリック3」のダイアログが示されている。しかし、それはリストがいつでも変更する能力を持つことができるので、アダプターの位置を取得することはできませんので、私はテキストを取得する必要がありますようにsoemthing(recyclerview item == "first"のテキスト){displayこのダイアログ} ....あなたは私の問題をさらに理解することができますか? – masterplox

関連する問題