Bonjour,
Après avoir suivi un tutoriel, je suis dans un impasse puisque je ne parviens pas à l'adapter à mon problème.
Voici le résultat actuel de ce code.
Le but est d'afficher une listView composée de spinner.
Main.xml
rowview.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/listView1" android:layout_height="match_parent" android:layout_width="match_parent" /> </LinearLayout>
strings.xm :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?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:weightSum="1"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/text" android:layout_weight="0.5" android:textSize="25sp" /> <Spinner android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/spin" android:prompt="@string/choice_prompt" android:layout_weight="0.5" /> </LinearLayout>
ListViewActivity :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, ListViewTestActivity!</string> <string name="app_name">ListViewTest</string> <string name="choice_prompt">Select a choice</string> <string-array name="choices"> <item>Alpha</item> <item>Bravo</item> <item>Charlie</item> </string-array> </resources>
La classe DataHolder :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class ListViewTestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView listView = (ListView) findViewById(R.id.listView1); DataHolder data = new DataHolder(this); DataHolder data1 = new DataHolder(this); DataHolder data2 = new DataHolder(this); DataHolder data3 = new DataHolder(this); DataHolder data4 = new DataHolder(this); DataAdapter d = new DataAdapter(this, R.layout.rowview, new DataHolder[] { data, data1, data2, data3, data4 }); listView.setAdapter(d); } }
Et la classe DataAdapter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class DataHolder { private int selected; private ArrayAdapter<CharSequence> adapter; public DataHolder(Context parent) { adapter = ArrayAdapter.createFromResource(parent, R.array.choices, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); } public ArrayAdapter<CharSequence> getAdapter() { return adapter; } public String getText() { return (String) adapter.getItem(selected); } public int getSelected() { return selected; } public void setSelected(int selected) { this.selected = selected; } }
Le soucis est que je ne parviens pas à adapter ce code avec ma propre liste de Strings (et non des Strings présents dans le fichier xml)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 public class DataAdapter extends ArrayAdapter<DataHolder> { private Activity myContext; public DataAdapter(Activity context, int textViewResourceId, DataHolder[] objects) { super(context, textViewResourceId, objects); myContext = context; } // We keep this ViewHolder object to save time. It's quicker than findViewById() when repainting. static class ViewHolder { protected DataHolder data; protected TextView text; protected Spinner spin; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; // Check to see if this row has already been painted once. if (convertView == null) { // If it hasn't, set up everything: LayoutInflater inflator = myContext.getLayoutInflater(); view = inflator.inflate(R.layout.rowview, null); // Make a new ViewHolder for this row, and modify its data and spinner: final ViewHolder viewHolder = new ViewHolder(); viewHolder.text = (TextView) view.findViewById(R.id.text); viewHolder.data = new DataHolder(myContext); viewHolder.spin = (Spinner) view.findViewById(R.id.spin); viewHolder.spin.setAdapter(viewHolder.data.getAdapter()); // Used to handle events when the user changes the Spinner selection: viewHolder.spin.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { viewHolder.data.setSelected(arg2); viewHolder.text.setText(viewHolder.data.getText()); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); // Update the TextView to reflect what's in the Spinner viewHolder.text.setText(viewHolder.data.getText()); view.setTag(viewHolder); Log.d("DBGINF", viewHolder.text.getText() + ""); } else { view = convertView; } // This is what gets called every time the ListView refreshes ViewHolder holder = (ViewHolder) view.getTag(); holder.text.setText(getItem(position).getText()); holder.spin.setSelection(getItem(position).getSelected()); return view; } }
Merci d'avance.
Partager