RecyclerViewを表示してタップするとアクションが発生するアプリを作っています。
RecyclerViewはMainActivityでtab1、tab2、tab3があってそれぞれArrayList1、ArrayList2、ArrayList3を表示します。
質問はKujiAdapterを設置してOnClickListenerでクリックした時にtab番号とpositionを取得したいのですが
positionはonBindViewHolderの引数listpositionでで取得することができるのですが、
MainActivityで発生したtabのデータをAdapter側に引き継ぎする方法が思いつきません。
どのようにすればできますか?ヒントをください。
環境 os mac
開発環境 Android studio 2.2.3
MainActivity.java
public class MainActivity extends AppCompatActivity { //タブFlag private int tabNumber = 0; KujiAdapter kujiAdapter = new KujiAdapter(this, tabNumber); TabLayout tabLayout = (TabLayout)findViewById(R.id.tab_layout); TabLayout tabLayout = (TabLayout)findViewById(R.id.tab_layout); tabLayout.addTab(tabLayout.newTab().setText(Lot1Name)); tabLayout.addTab(tabLayout.newTab().setText(Lot2Name)); tabLayout.addTab(tabLayout.newTab().setText(Lot3Name)); tabLayout.addTab(tabLayout.newTab().setText(R.string.descri_button)); tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { switch (tab.getPosition()){ case 0: tabNumber = 0; Log.d("UAA:default0",String.valueOf(defaultArray)); defaultArray = lot1Array; Log.d("UAA:default1",String.valueOf(defaultArray)); IndicateArray(defaultArray); Log.d("UAA", "Lot1"); break; case 1: tabNumber = 1; defaultArray = lot2Array; IndicateArray(defaultArray); Log.d("UAA", "Lot2"); break; case 2: tabNumber = 2; defaultArray = lot3Array; IndicateArray(defaultArray); Log.d("UAA", "Lot3"); break; case 3: Log.d("UAA", "Descri"); break; } } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); IndicateArray(lot1Array); Log.d("UAA:default2", String.valueOf(defaultArray)); Log.d("UAA:lot1", String.valueOf(lot1Array)); } //Arraylistを表示するメソッド public void IndicateArray(ArrayList<DataType> defaultArray){ RecyclerView.Adapter adapter = new KujiAdapter(defaultArray); recyclerView.setAdapter(adapter); recyclerView.addItemDecoration(new DividerItemDecoration(this)); adapter.notifyDataSetChanged(); }
KujiAdapter.java
public class KujiAdapter extends RecyclerView.Adapter<KujiViewHolder> { public Context context; private AlertDialog alertDialog; private int tabNumber; public KujiAdapter(Context context, int tabNumber){ this.context = context; this.tabNumber = tabNumber; } private ArrayList<DataType> npwDataSet; public KujiAdapter(ArrayList<DataType> npwdatas){ this.npwDataSet = npwdatas; } @Override public KujiViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from( parent.getContext()).inflate(R.layout.card_layout, parent, false ); return new KujiViewHolder(view); } @Override public void onBindViewHolder(final KujiViewHolder holder, final int listposition) { final EditText editText = new EditText(holder.base.getContext()); final EditText editNum = new EditText(holder.base.getContext()); holder.kujiContents.setText(npwDataSet.get(listposition).getKuji_contents()); holder.kujiNumber.setText(npwDataSet.get(listposition).getKuji_number()); holder.base.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(holder.base.getContext()); if (alertDialog == null) { LinearLayout layout = new LinearLayout(holder.base.getContext()); layout.setOrientation(LinearLayout.VERTICAL); TextView conponentText = new TextView(holder.base.getContext()); conponentText.setText(holder.base.getContext().getString(R.string.change_result)); conponentText.setHint(R.string.change_result_input); layout.addView(conponentText); layout.addView(editText); TextView numText = new TextView(holder.base.getContext()); numText.setText(holder.base.getContext().getString(R.string.change_num)); numText.setHint(R.string.change_num_input); layout.addView(numText); layout.addView(editNum); alertDialogBuilder .setTitle(holder.base.getContext().getString(R.string.change_result)) .setView(layout) .setPositiveButton(holder.base.getContext().getString(R.string.save_button), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.d("UAA:click", String.valueOf(tabNumber)); if(editText.length()==0|editNum.length()==0){ Toast.makeText(holder.base.getContext(),"noting",Toast.LENGTH_SHORT).show(); }else { switch (tabNumber){ case 0: lot1Array = PrefManager.loadDataList(holder.base.getContext(),"lot1Array"); Log.d("UAA:lot1array_ada",String.valueOf(lot1Array)); Log.d("UAA:position",String.valueOf(listposition)); Log.d("UAA:edittext",String.valueOf(lotText)); Log.d("UAA:editnum",String.valueOf(editText.toString())); lot1Array.set(listposition,new DataType(lotText.toString(),lotNum.toString())); PrefManager.saveDataList(holder.base.getContext(),"lot1Array",lot1Array); break; case 1: lot2Array = PrefManager.loadDataList(holder.base.getContext(),"lot2Array"); lot2Array.set(listposition,new DataType(lotText.toString(),lotNum.toString())); PrefManager.saveDataList(holder.base.getContext(),"lot2Array",lot2Array); break; case 2: lot3Array = PrefManager.loadDataList(holder.base.getContext(),"lot3Array"); lot3Array.set(listposition,new DataType(lotText.toString(),lotNum.toString())); PrefManager.saveDataList(holder.base.getContext(),"lot3Array",lot3Array); break; } } } }) .setNegativeButton(holder.base.getContext().getString(R.string.cancel_button), null); alertDialog = alertDialogBuilder.create(); alertDialog.show(); } alertDialog.show(); } }); }
回答1件
あなたの回答
tips
プレビュー