前提・実現したいこと
[前提]
趣味でプログラムを触ったことがある程度の初心者です。
質問内容はあまりに根本的な内容になるかとは思いますが、
参考本やHPに書かれている内容ではなかなか理解できず困っています。
是非、ご教授いただきたく思います。
[実現したいこと]
Androidの画面上にListViewを配置し、それぞれの行にTextViewとButtonを配置、
このButtonが押された時の処理を書きたいと思っています。(チェックリストのイメージです。)
発生している課題
参考書やHPを参考にし、コードを写経してみたものの、ボタンのイベントが取得できておりません。
現在クラスは3つあり、いつものMainActivityと
ListViewの各項目用のListItemクラス、
ArrayAdapterを継承したListAdapterクラスがあります。
各項目の場所を把握したい(〇列目のOKボタンが押された、など)のですが、
こういった場合はどこにどのような処理を書けばいいのでしょうか。
よろしくお願いします。
追記・修正
MainActivityのコードがListViewのコードになってしまっていました。
訂正しました。
申し訳ありませんでした。
ListAdapter のgetViewメソッド内にリスナーが抜けておりましたので追加しましたところ、
Button okButton =(Button) convertView.findViewById(R.id.ok_Button);
の部分でぬるぽが発生します。
画面写真
コード
MainActivity
Java
1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 // レイアウトからリストビューを取得 9 ListView listView = (ListView)findViewById(R.id.listview); 10 11 // リストビューに表示する要素を設定 12 ArrayList<ListItem> listItems = new ArrayList<>(); 13 for (int i = 0; i < 30; i++) { 14 ListItem item = new ListItem(i + 1, "sample text", 0); 15 listItems.add(item); 16 } 17 18 // 出力結果をリストビューに表示 19 ListAdapter adapter = new ListAdapter(this, R.layout.list_item, listItems); 20 listView.setAdapter(adapter); 21 22 // タップ時のイベントを追加 23 listView.setOnItemClickListener(onItemClickListener); 24 25 } 26 27 private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() { 28 @Override 29 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 30 Toast.makeText(MainActivity.this, "テスト", Toast.LENGTH_LONG).show(); 31 32 // タップしたアイテムの取得 33 ListView listView = (ListView)parent; 34 ListItem item = (ListItem)listView.getItemAtPosition(position); // ListItemにキャスト 35 36 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 37 builder.setTitle("Tap No. " + String.valueOf(position)); 38 builder.setMessage(item.getQuestionContent()); 39 builder.show(); 40 } 41 }; 42 43}
ListItem
Java
1public class ListItem { 2 private int mQuestionNumber = 0; 3 private String mQuestionContent = ""; 4 private int mStatus = 0; 5 6 public ListItem(int questionNumber, String questionContent, int status){ 7 mQuestionNumber = questionNumber; 8 mQuestionContent = questionContent; 9 mStatus = status; 10 } 11 12 public void setQuestionNumber(int questionNumber){ 13 mQuestionNumber = questionNumber; 14 } 15 16 public void setQuestionContext(String questionContext){ 17 mQuestionContent = questionContext; 18 } 19 20 public void setStatus(int status){ 21 mStatus = status; 22 } 23 public int getQuestionNumber(){ 24 return mQuestionNumber; 25 } 26 public String getQuestionContent(){ 27 return mQuestionContent; 28 } 29 public int getStatus(){ 30 return mStatus; 31 } 32 33} 34
ListAdapter
Java
1public class ListAdapter extends ArrayAdapter<ListItem> { 2 3 private int mResource; 4 private List<ListItem> mItems; 5 private LayoutInflater mInflater; 6 7 public ListAdapter(Context context, int resource, List<ListItem> items){ 8 super(context, resource, items); 9 10 mResource = resource; 11 mItems = items; 12 mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 13 14 } 15 16 @Override 17 public View getView(int position, View convertView, ViewGroup parent) { 18 View view; 19 20 if (convertView != null) { 21 view = convertView; 22 } 23 else { 24 view = mInflater.inflate(mResource, null); 25 } 26 27 // リストビューに表示する要素を取得 28 ListItem item = mItems.get(position); 29 30 Button okButton =(Button) convertView.findViewById(R.id.ok_Button); 31 okButton.setOnClickListener(new OK_Listener()); 32 33 Button ngButton =(Button) convertView.findViewById(R.id.ng_Button); 34 ngButton.setOnClickListener(new NG_Listener()); 35 36 Button noneButton =(Button) convertView.findViewById(R.id.none_Button); 37 noneButton.setOnClickListener(new NONE_Listener()); 38 39 Button commentButton =(Button) convertView.findViewById(R.id.comment_Button); 40 commentButton.setOnClickListener(new Comment_Listener()); 41 42 // QuestionNumberに番号を設定 43 TextView questionNumber = (TextView)view.findViewById(R.id.questionNumber); 44 questionNumber.setText(Integer.toString(item.getQuestionNumber())); 45 46 // QuestionContextに番号を設定 47 TextView questionContext = (TextView)view.findViewById(R.id.questionContext); 48 questionContext.setText(item.getQuestionContent()); 49 50 return view; 51 } 52 //okボタンのリスナー 53 class OK_Listener implements View.OnClickListener { 54 public void onClick(View v){ 55 Log.v("**********", "OK_Button"); 56 } 57 } 58 59 //ngボタンのリスナー 60 class NG_Listener implements View.OnClickListener { 61 public void onClick(View v){ 62 Log.v("**********", "NG_Button"); 63 } 64 } 65 66 //noneボタンのリスナー 67 class NONE_Listener implements View.OnClickListener { 68 public void onClick(View v){ 69 Log.v("**********", "NONEK_Button"); 70 } 71 } 72 73 //commentボタンのリスナー 74 class Comment_Listener implements View.OnClickListener { 75 public void onClick(View v){ 76 Log.v("**********", "Comment_Button"); 77 } 78 } 79}
回答2件
あなたの回答
tips
プレビュー