Drag N Drop ListView und Checkbox

  • Antworten:1
  • Bentwortet
Thenextone
  • Forum-Beiträge: 8

21.01.2012, 14:07:21 via Website

Ich komme mal wieder nicht weiter :(
Derzeit lade ich eine Anzahl von Sendern in eine View rein. (settings.xml wäre das Layout dazu).
Das Layout beinhaltet eine ListView. Die wird über einen ArrayAdapter und der settings_row.xml
geformt. Soweit gibt es keine Probleme.
Auf der settings_row.xml ist ein Bild, ein Text und eine Checkbox (also für jeden Datensatz
der reinkommt ein Bild, ein Text und eine Checkbox).
Das funktioniert soweit.

Leider bekomme ich weder etwas über die Textbox (ob die jetzt gesetzt wurde, oder nicht).
Über die Testdaten etc kann ich über textBox.setXY den Status schon setzen, nur am
Device selbst nicht (also der Hacken erscheint, aber er kann nicht gespeichert werden).

Wenn das mit der Textbox mal läuft, würde ich gerne ein Drag And Drop einbauen.
Derzeit habe ich die DDListView (irgendwo mal im Inet gefunden). Leider funktioniert die sobald
man am Bildschirm klickt (bei einer längeren ListView nicht die beste Wahl xD ). Vielleicht
gibt es irgendwo eine Anleitung für eine Drag And Drop Liste wo man länger am Touch-Screen
bleiben muss oder nur das Bild anklickt.

http://code.google.com/p/android-drag-and-drop-listview/
Die Drag And Drop Funktion verwende ich derzeit, aber mit den wie bereits beschriebenen
Problemen.

1<!-- settings.xml -->
2<?xml version="1.0" encoding="utf-8"?>
3<LinearLayout xmlns:android=...>
4
5 <LinearLayout... >
6 </LinearLayout>
7
8 <RelativeLayout ... >
9 </RelativeLayout>
10
11 <TextView ... />
12
13 <at.fhj.itm09.logic.DDListView
14 android:id="@+id/android:list"
15 android:layout_width="match_parent"
16 android:layout_height="230dp"
17 android:layout_weight="2" >
18 </at.fhj.itm09.logic.DDListView>
19
20 <TextView
21 android:id="@+id/android:empty"
22 android:layout_width="fill_parent"
23 android:layout_height="fill_parent"
24 android:text="@string/noText"
25 android:textColor="#000"/>
26
27 <RelativeLayout ... >
28
29 <Button ... />
30 <Button ... />
31 </RelativeLayout>
32</LinearLayout>

1/*
2 * Adapter
3 */...
4public class CustomAdapter extends ArrayAdapter<Channel> {
5 private ArrayList<Channel> items;
6 private Context context;
7 private int resourceID;
8 private Channel c;
9 private View v = null;
10
11 public CustomAdapter(Context context, int textViewResourceId, ArrayList<Channel> items) {
12 super(context, textViewResourceId, items);
13 this.items = items;
14 this.context = context;
15 this.resourceID = textViewResourceId;
16 }
17
18 @Override
19 public View getView(int position, View convertView, ViewGroup parent) {
20 v = convertView;
21 if(v == null){
22 /*
23 * added context to get system service!
24 */
25 LayoutInflater vi = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
26 v = vi.inflate(resourceID, null);
27 }
28 c = items.get(position);
29 if(c != null){
30 if(resourceID == R.layout.favourite_settings_row) {
31 setSettingView(position);
32 }
33 if(resourceID == R.layout.all_channels_row) {
34 setAllChannelsView();
35 }
36 }
37 return v;
38 }
39
40 /*
41 * private methods
42 */
43
44 private void setAllChannelsView() {
45 TextView name = (TextView) v.findViewById(R.id.channelTitleAllChannels);
46 if(name != null)
47 name.setText(c.getTitle());
48 }
49
50 private void setSettingView(int position) {
51 TextView name = (TextView) v.findViewById(R.id.channelTitleSettings);
52 CheckBox isFavourite = (CheckBox) v.findViewById(R.id.isFavourite);
53
54 if(name != null){
55 name.setText(c.getTitle());
56 }
57 }
58}

1/*
2 * Activity
3 */
4...
5
6public class SettingsActivity extends ListActivity implements OnClickListener {
7
8 private ArrayList<Channel> channels = new ArrayList<Channel>();
9 private CustomAdapter adapter;
10
11 private Button back, save, login, register;
12 private ListView listView = null;
13
14 @Override
15 protected void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.settings);
18
19 this.back = (Button) findViewById(R.id.closeSettings);
20 this.back.setOnClickListener(this);
21 this.save = (Button) findViewById(R.id.saveSettings);
22 this.save.setOnClickListener(this);
23
24 /*
25 * ListView
26 */
27 listView = getListView();
28 listView.setOnCreateContextMenuListener(this);
29 ((DDListView) listView).setDropListener(mDropListener);
30
31 /*
32 * add all channels to the custom view
33 */
34 channels = JsonParser.getChannels();
35 this.adapter = new CustomAdapter(this, R.layout.favourite_settings_row, channels);
36 listView.setAdapter(adapter);
37 }
38
39 //Drop Listener
40 private DDListView.DropListener mDropListener =
41 new DDListView.DropListener()
42 {
43 public void drop(int from, int to)
44 {
45 Log.e("SettingsActivity","from="+from+" to="+to);
46 Channel item=adapter.getItem(from);
47
48 adapter.remove(item);
49 adapter.insert(item, to);
50 }
51 };
52
53 /*
54 * OnClickListener for Buttons and Drag n Drop
55 */
56 @Override
57 public void onClick(View v) {
58 if(v.equals(back)){
59 /*
60 * TODO: implement check if all settings are saved!
61 */
62 this.finish();
63 }
64 if(v.equals(save)) {
65 /*
66 * TODO: implement save functionality
67 */
68 Log.i("Under Development", "Save functionality not implemented yet");
69 Toast t = Toast.makeText(this, "Save function not implemented yet", Toast.LENGTH_LONG);
70 t.show();
71
72 for(Channel c : channels) {
73 int position = adapter.getPosition(c);
74 if(c.getPosition() != position) {
75 c.setPosition(position);
76
77 Log.i("SettingsActivity", "Set channel " + c.getTitle() +
78 " to position " + position);
79 }
80 }
81 this.finish();
82 }
83 if(v.equals(login)) {
84 Log.i("Under Development", "Not implemented yet");
85 Toast t = Toast.makeText(this, "Not implemented yet", Toast.LENGTH_LONG);
86 t.show();
87 }
88 if(v.equals(register)) {
89 Log.i("Under Development", "Not implemented yet");
90 Toast t = Toast.makeText(this, "Not implemented yet", Toast.LENGTH_LONG);
91 t.show();
92 }
93 }
94}
1<!-- settings_row.xml -->
2<?xml version="1.0" encoding="utf-8"?>
3<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:background="#fff"
7 android:orientation="horizontal" >
8
9 <ImageView
10 android:id="@+id/channelIconSettings"
11 android:layout_width="wrap_content"
12 android:layout_height="fill_parent"
13 android:layout_marginLeft="6dip"
14 android:layout_marginRight="10dip"
15 android:layout_marginTop="2dip"
16 android:layout_marginBottom="2dip"
17 android:src="@drawable/no_image" />
18
19 <TextView
20 android:id="@+id/channelTitleSettings"
21 android:layout_width="148dp"
22 android:layout_height="fill_parent"
23 android:layout_marginLeft="10dip"
24 android:layout_marginTop="2dip"
25 android:layout_marginBottom="2dip"
26 android:layout_weight="0.30"
27 android:gravity="center_vertical"
28 android:text="@string/noText"
29 android:textAppearance="?android:attr/textAppearanceLarge"
30 android:textColor="#000" />
31
32 <CheckBox
33 android:id="@+id/isFavourite"
34 android:layout_width="wrap_content"
35 android:layout_height="fill_parent"
36 android:layout_marginRight="6dip"
37 android:layout_marginTop="2dip"
38 android:layout_marginBottom="2dip"
39 android:gravity="center_vertical" />
40
41</LinearLayout>

— geändert am 21.01.2012, 14:18:01

Antworten
Thenextone
  • Forum-Beiträge: 8

21.01.2012, 16:04:44 via Website

https://github.com/commonsguy/cwac-touchlist

Falls die Hilfestellung jemand noch benötigt. Habe die ListView
etc mit der Library (oberer Link) nun implementiert.
Funktioniert ausgezeichnet :)
Das funktioniert mit geringen Anwendungen genau nach Wunsch :)

Antworten