質問するログイン新規登録

質問編集履歴

2

ListAdapter のgetViewメソッド内でリスナーが抜けていたので追加しました。

2018/03/19 00:07

投稿

lereve
lereve

スコア12

title CHANGED
File without changes
body CHANGED
@@ -26,6 +26,10 @@
26
26
  訂正しました。
27
27
  申し訳ありませんでした。
28
28
 
29
+ ListAdapter のgetViewメソッド内にリスナーが抜けておりましたので追加しましたところ、
30
+ Button okButton =(Button) convertView.findViewById(R.id.ok_Button);
31
+ の部分でぬるぽが発生します。
32
+
29
33
  ### 画面写真
30
34
  ![イメージ説明](d340a8f957e02af34c77a9a4c840daa5.png)
31
35
  ### コード
@@ -116,17 +120,6 @@
116
120
 
117
121
  ListAdapter
118
122
  ```Java
119
- import android.content.Context;
120
- import android.view.LayoutInflater;
121
- import android.view.View;
122
- import android.view.ViewGroup;
123
- import android.widget.ArrayAdapter;
124
- import android.widget.Button;
125
- import android.widget.TextView;
126
-
127
- import java.util.List;
128
-
129
-
130
123
  public class ListAdapter extends ArrayAdapter<ListItem> {
131
124
 
132
125
  private int mResource;
@@ -156,6 +149,18 @@
156
149
  // リストビューに表示する要素を取得
157
150
  ListItem item = mItems.get(position);
158
151
 
152
+ Button okButton =(Button) convertView.findViewById(R.id.ok_Button);
153
+ okButton.setOnClickListener(new OK_Listener());
154
+
155
+ Button ngButton =(Button) convertView.findViewById(R.id.ng_Button);
156
+ ngButton.setOnClickListener(new NG_Listener());
157
+
158
+ Button noneButton =(Button) convertView.findViewById(R.id.none_Button);
159
+ noneButton.setOnClickListener(new NONE_Listener());
160
+
161
+ Button commentButton =(Button) convertView.findViewById(R.id.comment_Button);
162
+ commentButton.setOnClickListener(new Comment_Listener());
163
+
159
164
  // QuestionNumberに番号を設定
160
165
  TextView questionNumber = (TextView)view.findViewById(R.id.questionNumber);
161
166
  questionNumber.setText(Integer.toString(item.getQuestionNumber()));
@@ -166,6 +171,32 @@
166
171
 
167
172
  return view;
168
173
  }
174
+ //okボタンのリスナー
175
+ class OK_Listener implements View.OnClickListener {
176
+ public void onClick(View v){
177
+ Log.v("**********", "OK_Button");
178
+ }
179
+ }
169
180
 
181
+ //ngボタンのリスナー
182
+ class NG_Listener implements View.OnClickListener {
183
+ public void onClick(View v){
184
+ Log.v("**********", "NG_Button");
185
+ }
186
+ }
187
+
188
+ //noneボタンのリスナー
189
+ class NONE_Listener implements View.OnClickListener {
190
+ public void onClick(View v){
191
+ Log.v("**********", "NONEK_Button");
192
+ }
193
+ }
194
+
195
+ //commentボタンのリスナー
196
+ class Comment_Listener implements View.OnClickListener {
197
+ public void onClick(View v){
198
+ Log.v("**********", "Comment_Button");
199
+ }
200
+ }
170
201
  }
171
202
  ```

1

MainActivityのコードがListViewのコードになってしまっていたのを修正しました。

2018/03/19 00:07

投稿

lereve
lereve

スコア12

title CHANGED
File without changes
body CHANGED
@@ -20,62 +20,59 @@
20
20
  こういった場合はどこにどのような処理を書けばいいのでしょうか。
21
21
 
22
22
  よろしくお願いします。
23
+
24
+ ### 追記・修正
25
+ MainActivityのコードがListViewのコードになってしまっていました。
26
+ 訂正しました。
27
+ 申し訳ありませんでした。
28
+
23
29
  ### 画面写真
24
30
  ![イメージ説明](d340a8f957e02af34c77a9a4c840daa5.png)
25
31
  ### コード
26
32
  MainActivity
27
33
  ```Java
28
- import android.content.Context;
34
+ public class MainActivity extends AppCompatActivity {
29
- import android.view.LayoutInflater;
30
- import android.view.View;
31
- import android.view.ViewGroup;
32
- import android.widget.ArrayAdapter;
33
- import android.widget.Button;
34
- import android.widget.TextView;
35
35
 
36
+ @Override
37
+ protected void onCreate(Bundle savedInstanceState) {
36
- import java.util.List;
38
+ super.onCreate(savedInstanceState);
39
+ setContentView(R.layout.activity_main);
37
40
 
41
+ // レイアウトからリストビューを取得
42
+ ListView listView = (ListView)findViewById(R.id.listview);
38
43
 
44
+ // リストビューに表示する要素を設定
39
- public class ListAdapter extends ArrayAdapter<ListItem> {
45
+ ArrayList<ListItem> listItems = new ArrayList<>();
46
+ for (int i = 0; i < 30; i++) {
47
+ ListItem item = new ListItem(i + 1, "sample text", 0);
48
+ listItems.add(item);
49
+ }
40
50
 
41
- private int mResource;
51
+ // 出力結果をリストビューに表示
42
- private List<ListItem> mItems;
52
+ ListAdapter adapter = new ListAdapter(this, R.layout.list_item, listItems);
43
- private LayoutInflater mInflater;
53
+ listView.setAdapter(adapter);
44
54
 
55
+ // タップ時のイベントを追加
45
- public ListAdapter(Context context, int resource, List<ListItem> items){
56
+ listView.setOnItemClickListener(onItemClickListener);
46
- super(context, resource, items);
47
57
 
48
- mResource = resource;
49
- mItems = items;
50
- mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
51
-
52
58
  }
53
59
 
60
+ private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
54
- @Override
61
+ @Override
55
- public View getView(int position, View convertView, ViewGroup parent) {
62
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
56
- View view;
63
+ Toast.makeText(MainActivity.this, "テスト", Toast.LENGTH_LONG).show();
57
64
 
65
+ // タップしたアイテムの取得
58
- if (convertView != null) {
66
+ ListView listView = (ListView)parent;
67
+ ListItem item = (ListItem)listView.getItemAtPosition(position); // ListItemにキャスト
68
+
69
+ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
70
+ builder.setTitle("Tap No. " + String.valueOf(position));
71
+ builder.setMessage(item.getQuestionContent());
59
- view = convertView;
72
+ builder.show();
60
73
  }
61
- else {
62
- view = mInflater.inflate(mResource, null);
63
- }
74
+ };
64
75
 
65
- // リストビューに表示する要素を取得
66
- ListItem item = mItems.get(position);
67
-
68
- // QuestionNumberに番号を設定
69
- TextView questionNumber = (TextView)view.findViewById(R.id.questionNumber);
70
- questionNumber.setText(Integer.toString(item.getQuestionNumber()));
71
-
72
- // QuestionContextに番号を設定
73
- TextView questionContext = (TextView)view.findViewById(R.id.questionContext);
74
- questionContext.setText(item.getQuestionContent());
75
-
76
- return view;
77
- }
78
-
79
76
  }
80
77
  ```
81
78