質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

2288閲覧

ListViewのAdapterから、ListViewを参照したい

akamakku

総合スコア191

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/07/28 18:18

ListViewの各行にCheckBoxを配置したレイアウトを作っています。
CheckBoxの状態を、ListViewを配置しているFragmentで確認するために、Adapter内でCheckBoxにsetListenerをして、CheckBoxが押された時に、その状態を、状態を保持するオブジェクトにsetしています。

ここまでは良いのですが、ListViewのCheckBoxが一つでもCheckされていたら、Fragment上のButtonの見た目を変えたいんです。

そのために、そのAdapterがsetされているListViewが置いてあるFragmentを参照したいんですが、どうにもやり方がわかりません。教えていただけるとありがたいです。

それとも、直接参照しない方法でやるものなんでしょうか?

Java

1public class ListOfTasksAdapter extends BaseAdapter { 2 3 private Context context; 4 private LayoutInflater layoutInflater = null; 5 private List<Todo> tasks; 6 private SimpleDateFormat simpleDateFormat; 7 public CheckBoxesStateHolder stateHolder = new CheckBoxesStateHolder(); 8 private CheckBox checkBox; 9 10 public ListOfTasksAdapter(Context context){ 11 this.context = context; 12 this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 13 this.tasks = new ArrayList<Todo>(); 14 } 15 16 public void setList(ArrayList<Todo> tasks){ 17 this.tasks = tasks; 18 } 19 20 21 22 @Override 23 public int getCount() { 24 return tasks.size(); 25 } 26 27 @Override 28 public Object getItem(int position) { 29 return tasks.get(position); 30 } 31 32 @Override 33 public long getItemId(int position) { 34 return tasks.get(position).getId(); 35 } 36 37 @Override 38 public View getView(int position, View convertView, ViewGroup parent) { 39 final int p = position; 40 41 convertView = layoutInflater.inflate(R.layout.layout_list_task_row, parent, false); 42 43 simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日(E) hh:mm"); 44 45 ((TextView)convertView.findViewById(R.id.listTextView1)).setText(tasks.get(position).getString()); 46 ((TextView)convertView.findViewById(R.id.listTextView2)).setText(simpleDateFormat.format(new Date(tasks.get(position).getNoticeDateTime()))); 47 checkBox = (CheckBox)convertView.findViewById(R.id.checkbox); 48 checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 49 @Override 50 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 51 stateHolder.setState(p,isChecked); 52 } 53 }); 54 55 checkBox.setChecked(stateHolder.getState(position)); 56 57 return convertView; 58 } 59 60} 61

Java

1public class CheckBoxesStateHolder { 2 private ArrayList<Boolean> list = new ArrayList<>(); 3 4 public void setState(int position, boolean isChecked){ 5 if(list.size() < (position+1)){ 6 this.expandSize(position+1); 7 } 8 list.set(position, isChecked); 9 } 10 11 public boolean getState(int position){ 12 return list.get(position); 13 } 14 15 public void expandSize(int size){ 16 while(list.size() < size){ 17 list.add(false); 18 } 19 } 20 21 public boolean hasCheckedBox(){ 22 boolean result = true; 23 if(list.indexOf(true) == -1){ 24 result = false; 25 } 26 return result; 27 } 28} 29

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ただしい方法なのかわかりませんが、Adapterのコンストラクタに引数として渡された、context(=getActivity())から順番に辿ってFragmentを参照することにしました。

これから勉強していくことで、もっとスマートな方法に出会えることを期待します。

投稿2016/07/30 01:54

akamakku

総合スコア191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問