2017-04-14 2 views
0

私はrecyclerviewを持っており、on1アイテムをクリックするとそのアイテムのサブカテゴリを持つダイアログが開きます。各サブカテゴリにはcheckbpxがあります。私は1、チェックボックスをクリックして、[OK]をクリックし、別のサブカテゴリに別のカテゴリに同じインデックスの項目を選択するために戻ったときにもchecked.thisされ、サブカテゴリチェックボックス付きRecyclerViewは、同じインデックス値のサブカテゴリ内のすべてのアイテムをチェックします

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.bt_ok: 
      // Updatecatagory(); 
      for (int i = 0; i < mysubcatagoryAdapter.catagory_list.size(); i++) { 

       if (!mysubcatagoryAdapter.isChecked) { 
        // mysubcatagoryAdapter.removehash.get(i).; 
        //mysubcatagoryAdapter.removehash.clear(); 
        mysubcatagoryAdapter.removehash.remove(i); 
       } 
      } 

      finish(); 
    } 
} 

を一覧表示するダイアログボックスから、私のコードで、これはあります私のアダプタ

public class CustomRecycleViewAdapter_Language extends 
RecyclerView.Adapter<CustomRecycleViewAdapter_Language.MyLanguageViewHolder> 
{ 
private Context context; 
public ArrayList<String> catagory_list; 
private View resourceLayout; 
private OnSelected onSelected; 
private String checkForAction; 
public ArrayList<String> removehash; 
public boolean isChecked=false; 
int count = 1; 
SharedPreferences selection = 
getApplicationContext().getSharedPreferences("MyLang", MODE_PRIVATE); 

SharedPreferences.Editor editor = selection.edit(); 

public CustomRecycleViewAdapter_Language(Context context, ArrayList<String> 
catagory_list, String checkForAction) { 
    this.context = context; 
    this.catagory_list = catagory_list; 
    this.checkForAction = checkForAction; 

} 

public class MyLanguageViewHolder extends RecyclerView.ViewHolder { 
    private TextView tv_option; 
    private CheckBox cb_option; 
    private RelativeLayout rl_option; 

    public MyLanguageViewHolder(View itemView) { 
     super(itemView); 
     tv_option = (TextView) itemView.findViewById(R.id.tv_option); 
     cb_option = (CheckBox) itemView.findViewById(R.id.cb_option); 
     rl_option = (RelativeLayout) itemView.findViewById(R.id.rl_option); 
    } 
} 

@Override 
public MyLanguageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    resourceLayout = LayoutInflater.from(parent.getContext()).inflate(R.layout.resource_selectfilter, null); 
    MyLanguageViewHolder mcv = new MyLanguageViewHolder(resourceLayout); 
    return mcv; 
} 

@Override 
public void onBindViewHolder(final MyLanguageViewHolder holder, final int position) { 
    holder.tv_option.setText(catagory_list.get(position).split("#") 
    [1].substring(0, 1).toUpperCase() + 
    catagory_list.get(position).split("#")[1].substring(1)); 
    removehash = new ArrayList<>(); 
    removehash.clear(); 

    Common.languageselection.add(position); 

    for (int i = 0; i < catagory_list.size(); i++) { 

     removehash.add(catagory_list.get(i).split("#")[0]); 
    } 


    if (!Common.isFlag) { 


     try { 
      if(Common.languageselection.size()!=0) { 

       if 
      (Common.setid.get(position).equals(String.valueOf(position))) { 

        holder.cb_option.setChecked(true); 


       } 
      } 
      count = 2; 
     } catch (Exception e) { 

     } 


    } 


    if (checkForAction.equals("UPLOAD")) { 
     holder.cb_option.setVisibility(View.GONE); 

    } 


    holder.rl_option.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (onSelected != null) { 

       if (count == 2) { 
        if (!holder.cb_option.isChecked()) { 
         holder.cb_option.setChecked(true); 
         removehash.get(position); 
         isChecked=true; 
         Common.setid.add(String.valueOf(position)); 
        } else if (holder.cb_option.isChecked()) { 

         holder.cb_option.setChecked(false); 
         Common.setid.remove(String.valueOf(position)); 
         removehash.remove(position); 


        } 

        onSelected.onClicked(view, removehash.get(position)); 
        isChecked=true; 

       } else { 

        if (!holder.cb_option.isChecked()) { 
         holder.cb_option.setChecked(true); 
         Common.setid.add(String.valueOf(position)); 
         removehash.get(position); 
         isChecked=true; 

        } else if (holder.cb_option.isChecked()) { 
         holder.cb_option.setChecked(false); 
         removehash.remove(position); 
         Common.setid.remove(String.valueOf(position)); 
        } 
        if (checkForAction.equals("UPLOAD")) { 
         holder.cb_option.setVisibility(View.GONE); 
         onSelected.onClicked(view, catagory_list.get(position)); 
        } else 
         onSelected.onClicked(view, removehash.get(position)); 
        Common.holdvalues.add(removehash.get(position)); 

       } 


       Log.v("SHOW", removehash.toString()); 


      } 
     } 
    }); 


    //  try 
    //  { 
    // 
    //   if(Common.languageselection.size()>0) 
//   { 
//   for(int i=0;i<Common.languageselection.size();i++) 
//   { 
// 
// 
//     
      if(Common.languageselection.get(i).equals(Common.setid.get(i))) 
//    { 
// 
//     holder.cb_option.setChecked(true); 
//    } 
//    else 
//     holder.cb_option.setChecked(false); 
// 
//   } 
//   } 
// 
//  }catch (Exception e) 
//  { 
// 
//  } 

    /* holder.tv_option.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (onlanguageSelected != null) { 
       onlanguageSelected.onLanguageClicked(view,catagory_list.get(position)); 
      } 
     } 
    });*/ 
} 

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

public void setOnSelected(OnSelected onSelected) { 
    this.onSelected = onSelected; 
} 

public interface OnSelected { 
    public void onClicked(View view, String selectedVal); 
} 


} 

これは、レイアウト

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="@color/white"> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_subcatagories" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="2dp" 
     android:padding="20dp" 
     android:scrollbars="vertical"> 
     </android.support.v7.widget.RecyclerView> 

     <LinearLayout 
     android:id="@+id/ll_respondcontainer" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@+id/rv_subcatagories" 
     android:orientation="horizontal" 
     android:padding="10dp"> 

     <Button 
      android:id="@+id/bt_ok" 
      android:layout_width="80dp" 
      android:layout_height="30dp" 
      android:layout_marginRight="2dp" 
      android:background="@drawable/btn_background" 
      android:text="OK" 
      android:textColor="@color/white" /> 

    </LinearLayout> 
    </RelativeLayout> 
    </RelativeLayout> 

私はそれが助け場合plsはチェックの例を作ったあなたの質問からRecyclerView項目

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingRight="3dp" 
android:paddingTop="2dp"> 

<RelativeLayout 
    android:id="@+id/rl_option" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/transparent" 
    android:orientation="horizontal" 
    android:padding="5dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true"> 
    <CheckBox 
     android:id="@+id/cb_option" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:clickable="false" 
     android:button="@drawable/checkbox_selector" 
     android:gravity="left" /> 

    <TextView 
     android:id="@+id/tv_option" 
     android:layout_width="wrap_content" 
     android:layout_height="30dp" 
     android:layout_centerVertical="true" 
     android:text="Arindom" 
     android:background="@drawable/edittext_bg" 
     android:gravity="center" 
     android:padding="2dp" 
     android:textColor="@color/filtertextcolor" 
     android:textSize="15dp" /> 

    <View 
     android:id="@+id/UnderPassword" 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:layout_below="@+id/tv_option" 
     android:layout_centerHorizontal="true" 
     android:background="@color/linecolor" /> 
</RelativeLayout> 
</RelativeLayout> 

答えて

0

です。

メインクラスRecyclerView活動

public class RecyclerViewActivity extends AppCompatActivity implements CategoryClickListener { 
    private RecyclerView recyclerViewCategory; 
    private RecyclerView.LayoutManager mLayoutManager; 
    private Context context = RecyclerViewActivity.this; 
    private Activity activity = RecyclerViewActivity.this; 


     private CategoryAdapter categoryAdapter; 
     private CategoryClickListener categoryClickListener; 

     ArrayList<ArrayList<SubcategoryModel>> listData = new ArrayList<>(); 
     @Override 
     protected void onCreate(@Nullable Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_recycler_view); 

      categoryClickListener = this; 
      getDummyData(); 
      recyclerViewCategory = (RecyclerView) findViewById(R.id.recycler_view); 
      mLayoutManager = new LinearLayoutManager(context); 
      recyclerViewCategory.setHasFixedSize(true); 
      recyclerViewCategory.setLayoutManager(mLayoutManager); 

      categoryAdapter = new CategoryAdapter(context, listData, categoryClickListener); 
      recyclerViewCategory.setAdapter(categoryAdapter); 


     } 

     public void getDummyData() { 
      for (int i = 0; i < 10; i++) { 
       ArrayList<SubcategoryModel> subCategoryData = new ArrayList<>(); 
       subCategoryData.add(new SubcategoryModel("Sub category 1", false)); 
       subCategoryData.add(new SubcategoryModel("Sub category 2", false)); 
       subCategoryData.add(new SubcategoryModel("Sub category 3", false)); 
       subCategoryData.add(new SubcategoryModel("Sub category 4", false)); 
       subCategoryData.add(new SubcategoryModel("Sub category 5", false)); 
       listData.add(subCategoryData); 
      } 
     } 
     private void showDialog(ArrayList<SubcategoryModel> listSubcategory) { 
      try { 

       final Dialog dialog = new Dialog(context); 
       dialog.setCancelable(true); 
       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialog.getWindow().getAttributes().windowAnimations 
         = R.style.Animation_AppCompat_DropDownUp; 

       dialog.setContentView(R.layout.dialog_subcategory); 

       WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
       Window window = dialog.getWindow(); 
       lp.copyFrom(window.getAttributes()); 
       lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
       lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 
       window.setAttributes(lp); 

       RecyclerView recyclerViewSubcategory = (RecyclerView) dialog.findViewById(R.id.recycler_view_subcategory); 
       RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(context); 
       recyclerViewSubcategory.setHasFixedSize(true); 
       recyclerViewSubcategory.setLayoutManager(mLayoutManager); 

       SubCategoryAdapter adapter = new SubCategoryAdapter(context, listSubcategory); 
       recyclerViewSubcategory.setAdapter(adapter); 


       dialog.show(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 



     @Override 
     public void categoryClick(int position) { 
       showDialog(listData.get(position)); 
     } 
    } 

カテゴリーアダプタクラス

public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.CustomViewHolder> { 

    private ArrayList<ArrayList<SubcategoryModel>> listData; 
    private Context context; 
    private CategoryClickListener categoryClickListener; 

    public CategoryAdapter(Context context, ArrayList<ArrayList<SubcategoryModel>> listData, CategoryClickListener categoryClickListener) { 
     this.listData = listData; 
     this.context = context; 
     this.categoryClickListener = categoryClickListener; 
    } 

    @Override 
    public CategoryAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_category_view, parent, false); 

     CategoryAdapter.CustomViewHolder viewHolder = new CategoryAdapter.CustomViewHolder(view); 
     return viewHolder; 
    } 

    //This method binds all widgets with a value 
    @Override 
    public void onBindViewHolder(final CategoryAdapter.CustomViewHolder holder, int position) { 
     try { 

      holder.textViewCategory.setText("Category "+(position+1)); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return (null != listData ? listData.size() : 0); 
    } 

    class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     private TextView textViewCategory; 


     public CustomViewHolder(View itemView) { 
      super(itemView); 
      itemView.setOnClickListener(this); 
      textViewCategory = (TextView) itemView.findViewById(R.id.textViewCategory); 


     } 

     @Override 
     public void onClick(View v) { 

       categoryClickListener.categoryClick(getAdapterPosition()); 


     } 
    } 
} 

サブカテゴリアダプタクラス

class SubCategoryAdapter extends RecyclerView.Adapter<SubCategoryAdapter.CustomViewHolder> { 

    private ArrayList<SubcategoryModel> listData; 
    private Context context; 

    public SubCategoryAdapter(Context context, ArrayList<SubcategoryModel> listData) { 
     this.listData = listData; 
     this.context = context; 
    } 

    @Override 
    public SubCategoryAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_subcategory_view, parent, false); 

     SubCategoryAdapter.CustomViewHolder viewHolder = new SubCategoryAdapter.CustomViewHolder(view); 
     return viewHolder; 
    } 

    //This method binds all widgets with a value 
    @Override 
    public void onBindViewHolder(final SubCategoryAdapter.CustomViewHolder holder, int position) { 
     try { 

      SubcategoryModel subCategory = listData.get(position); 
      holder.textViewSubCategory.setText(subCategory.name); 
      if(subCategory.isChecked) 
      { 
       holder.checkBox.setChecked(true); 
      }else{ 
       holder.checkBox.setChecked(false); 
      } 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return (null != listData ? listData.size() : 0); 
    } 

    class CustomViewHolder extends RecyclerView.ViewHolder { 

     private TextView textViewSubCategory; 
     private CheckBox checkBox; 


     public CustomViewHolder(View itemView) { 
      super(itemView); 
      textViewSubCategory = (TextView) itemView.findViewById(R.id.textViewSubCategory); 
      checkBox = (CheckBox) itemView.findViewById(R.id.checkbox); 
      checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

        listData.get(getAdapterPosition()).isChecked=isChecked; 

       } 
      }); 

     } 

    } 
} 

サブカテゴリモデルクラス

public class SubcategoryModel { 

    String name; 
    boolean isChecked; 

    public SubcategoryModel(String name, boolean isChecked) 
    { 
     this.name = name; 
     this.isChecked = isChecked; 
    } 

} 

カテゴリークリックリスナー

public interface CategoryClickListener { 

    public void categoryClick(int position); 

} 

ACTIVITY_ recycler_view

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:scrollbars="none"> 

    </android.support.v7.widget.RecyclerView> 

</LinearLayout> 

dialog_subcategory

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view_subcategory" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:scrollbars="none"> 

    </android.support.v7.widget.RecyclerView> 

</LinearLayout> 

row_category_view

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/white" 
    android:padding="10dp"> 

    <TextView 
     android:id="@+id/textViewCategory" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#000"/> 


</LinearLayout> 

row_subcategory_view

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp"> 

    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    <TextView 
     android:id="@+id/textViewSubCategory" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#000"/> 



</LinearLayout> 

それはあなたを助けるかもしれません。

+0

sorry.didnt work.uが私を助けることができるなら、私はヒントを与えることができます。mysubcatagoryAdapter.removehash.remove(i)またはclear(i)をアクティビティで使用すると、アダプタ内のarraylistをフェッチしてクリアしますOKが押されたときにすべてのチェックが行われますが、私がチェックしたものはすべてのサブカテゴリでチェックして、チェックしないとチェックしないと、plsを助けることができますか? –

+0

レイアウトファイルとarraylistのサンプルデータを送ってもらえますか?だから私はあなたをより良く助けることができます。 –

+1

私はレイアウトファイルで質問を編集し、各行のチェックボックスを使ってサブカテゴリーのarraylistデータを取り出します - –

関連する問題