Listview mit verschiedenen Daten!?

  • Antworten:19
  • Bentwortet
Kurt G.
  • Forum-Beiträge: 67

14.07.2011, 01:22:14 via Website

Hallo Leute,

irgendwie stehe ich ein wenig auf dem Schlauch, ich möchte eine Liste erstellen, in der in jeder Zeile links 1 Icon und Rechts 2 Zeilen text sind, wenn man auf einen Eintrag tippt soll die jeweilige Activity aufgerufen werden...

so wie auf dem Bild, halt in einer Liste, wo jeder eintrag andere Werte hat(auch ein anderes Icon) und das man per klick auf einen Eintrag die Activity wechselt....



Ich hoffe echt ihr könnt mir weiterhelfen, bin scho echt am verzweifeln

mfg



Kurt

Antworten
Marcel B.
  • Forum-Beiträge: 31

14.07.2011, 09:23:15 via Website

Heiho,

also hier erstmal wie man ein CustomListItem erstellt: http://developer.android.com/resources/tutorials/views/hello-listview.html
Das list_item.xml (im Beispielt) musst du halt deinen wünschen anpassen (erweitern um noch eine textview und eine imageview).
Im Beispiel findest du auch den onItemClickListener.

Ich hoffe ich konnte dir helfen.

Gruß Marcel

P.S ich denke das ist auch ein gutes Beispiel: http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/

— geändert am 14.07.2011, 09:25:26

Antworten
Kurt G.
  • Forum-Beiträge: 67

14.07.2011, 18:10:24 via Website

So erstmal danke für den Link, habs jetzt auch schon geschafft die ListView anzuzeigen, jedoch will er es mit folgendem Layout nicht mehr machen...

Also wie bekomme ich jetzt die drei Daten (Bild, Name, ID) in die Listview..?

Hier mal mein Code:

items.java
1import android.app.ListActivity;
2import android.os.Bundle;
3import android.widget.ArrayAdapter;
4import android.widget.ListView;
5
6public class Items extends ListActivity {
7
8 @Override
9 public void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11
12 String[] countries = getResources().getStringArray(R.array.menu_items);
13 setListAdapter(new ArrayAdapter<String>(this, R.layout.row, countries));
14
15 ListView lv = getListView();
16 lv.setTextFilterEnabled(false);
17
18 }
19
20}

row.xml
1<?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="50dp" xmlns:android="http://schemas.android.com/apk/res/android">
3
4 <!-- Icon LineaLayout -->
5 <LinearLayout android:layout_height="fill_parent" android:id="@+id/linearLayout2" android:layout_width="wrap_content" android:layout_weight="24" android:orientation="horizontal">
6
7 </LinearLayout>
8 <!-- End Icon LinearLayout -->
9
10 <LinearLayout android:layout_height="fill_parent" android:id="@+id/linearLayout7" android:layout_width="wrap_content" android:layout_weight="2"></LinearLayout>
11
12 <LinearLayout android:layout_height="fill_parent" android:id="@+id/linearLayout3" android:layout_width="wrap_content" android:layout_weight="74" android:orientation="horizontal">
13
14 <LinearLayout android:layout_height="fill_parent" android:id="@+id/linearLayout6" android:layout_width="fill_parent" android:orientation="vertical">
15
16 <!-- Name LinearLayout -->
17 <LinearLayout android:layout_height="wrap_content" android:layout_weight="50" android:id="@+id/linearLayout4" android:layout_width="fill_parent" android:orientation="vertical">
18 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
19 android:layout_width="fill_parent"
20 android:layout_height="fill_parent" >
21</TextView>
22 </LinearLayout>
23 <!-- End Name LinearLayout -->
24
25 <!-- ID LinearLayout -->
26 <LinearLayout android:layout_height="wrap_content" android:layout_weight="50" android:id="@+id/linearLayout5" android:layout_width="fill_parent" android:orientation="vertical">
27
28 </LinearLayout>
29 <!-- End ID LinearLayout -->
30
31 </LinearLayout>
32
33 </LinearLayout>
34 </LinearLayout>

und Strings.xml

1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3 <string-array name="menu_items">
4 <item>Sunday</item>
5 <item>Monday</item>
6 <item>Thuesday</item>
7 <item>Wednesday</item>
8 <item>Thursday</item>
9 <item>Friday</item>
10 <item>Saturday</item>
11 </string-array>
12</resources>



Hoffe ihr könnt mir weiterhelfen...

Antworten
Marcel B.
  • Forum-Beiträge: 31

14.07.2011, 19:17:23 via Website

Was zum.....??? Dein layout ist etwas konfus, und wieso hast du nur eine TextView und nicht 2 und wo ist die ImageView?

Aber zum Thema wie befüll ich ein CustomLayout hab ich auch nen Link: http://mylifewithandroid.blogspot.com/2008/03/my-first-meeting-with-simpleadapter.html


Hier mal der Adapter:
SimpleAdapter notes = new SimpleAdapter(this, list,
R.layout.main_item_two_line_row,
new String[] { "line1","line2" },
new int[] { R.id.text1, R.id.text2 }
);

EDIT: Außerdem brauchen deine TextViews und ImageViews IDs damit du sie referenzieren kannst. Schau dir wirklich mal den link oben an.

— geändert am 14.07.2011, 19:21:04

Antworten
Kurt G.
  • Forum-Beiträge: 67

14.07.2011, 20:18:14 via App

ok danke, werds mir nachher mal testen....

jaaa bin da noch win wenig von html vorbelastet, deswegen so verschachtelt...:-D

Antworten
Marcel B.
  • Forum-Beiträge: 31

14.07.2011, 22:36:41 via Website

Umso mehr du verschachteltest umso mehr performance geht drauf. Klar stört das bißchen nicht bei nem 1,2 GHz Prozessor trotzdem geht das einfacher:
Als Tipp, mal schnell zusammengepfuscht:
<LinearLayout mit fillparent und background farbe die du willst und horizontal und padding>
<ImageView mit gewissen MarginRight und wrap_content/>
<LinearLayout, vertical, Rest>
<TextView weight="50" />
<TextView weight="50"/>
</LinearLayout>
</LinearLayout>

Gruß Marcel

— geändert am 14.07.2011, 22:37:47

Antworten
Kurt G.
  • Forum-Beiträge: 67

14.07.2011, 23:25:28 via Website

So also, habe es jetzt soweit, das er mir die daten aus einer xml in der richtigen textview anzeigt, wie füge ich nun die 2 textzeile ein, und wie mache ich das mit dem icon (immer ein anderes)

1String[] names = getResources().getStringArray(R.array.menu_items_names);
2 String[] itemids = getResources().getStringArray(R.array.menu_items_ids);
3
4 setListAdapter(new ArrayAdapter<String>(this, R.layout.row, R.id.text1,names));
5
6 ListView lv = getListView();
7 lv.setTextFilterEnabled(false);
8
9 }

Ich weiß ich bin nervig, aber ich schnall das mit den listviews einfach nicht...^^

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

14.07.2011, 23:28:26 via Website

Wenn du schon Views zählst: das innere LinearLayout kannst du auch noch einsparen, indem du dein äusseres zu einem RelativeLayout machst und die 3 sichtbaren Views relativ zueinander positionierst :P

Antworten
Marcel B.
  • Forum-Beiträge: 31

14.07.2011, 23:30:14 via Website

hehe ok, da hast du recht, aber man kanns auch übertreiben ^^
Nichtsdestotrotz sollte man nicht mit layouts um sich schmeißen oder? :grin:

Antworten
Kurt G.
  • Forum-Beiträge: 67

15.07.2011, 00:13:07 via Website

soooooooo hab das ganze jetzt so, wie fülle ich die nun mit meinen Daten?? und mit dem jeweiligen Icon?

P.S.: Bitte habt erbarmen mit mir, irgendwann versteh ich es auch nochmal. :(

1package de.android.codeworker.minecrafthelper;
2
3import android.app.ListActivity;
4import android.os.Bundle;
5import android.widget.SimpleAdapter;
6import android.view.Menu;
7import android.view.MenuItem;
8import java.util.ArrayList;
9import java.util.HashMap;
10
11public class Items extends ListActivity
12{
13 ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
14
15 /** Called when the activity is first created. */
16 @Override
17 public void onCreate(Bundle icicle)
18 {
19 super.onCreate(icicle);
20 setContentView(R.layout.items);
21 notes = new SimpleAdapter(this, list, R.layout.row, new String[] { "line1","line2" }, new int[] { R.id.text1, R.id.text2 } );
22 setListAdapter( notes );
23 }
24
25 private SimpleAdapter notes;
26}

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

15.07.2011, 00:19:35 via Website

hehe ok, da hast du recht, aber man kanns auch übertreiben ^^

Ich finde das übersichtlicher und mache praktisch alles mit RelativeLayouts :)


Nichtsdestotrotz sollte man nicht mit layouts um sich schmeißen oder?

Auf keinen Fall, (abgesehen davon das es offensichtlich ist) findet man ja auch am laufenden Band in den Dokus, das Layouts Performance-relevant sind.

Antworten
Marcel B.
  • Forum-Beiträge: 31

15.07.2011, 01:01:05 via Website

@and dev: ich bin eher der Linear Typ ^^

Also, ich schau morgen nochmal nach, aber wenn ich mich recht erinnere (absolut ohne Gewähr) musst du einfach als 3.ID das ImageView hinzufügen und ihm ein R.drawable.blablubb übergeben.

Antworten
Kurt G.
  • Forum-Beiträge: 67

16.07.2011, 18:42:13 via Website

könnte mir einer nen beispiel zeigen bitte, komme einfach damit nicht zurecht, will doch nur einträge in eine listview mit je einem Bild und 2 texten...


:(:(:(

Antworten
cypressious
  • Forum-Beiträge: 3

18.07.2011, 23:45:10 via Website

Guck dir mal folgenden Artikel an: http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/
Der hat mir auch sehr geholfen. Es geht darum, dass du zunächst ein Layout für ein Listenelement anlegst und den einzelnen Views eine eigene ID gibst.
Anschließend erstellst du eine Klasse, deren Objekte die darzustellenden Informationen halten, indeinem Fall zwei Texte und ein Bild. Anschließend definierst du dir einen eigenen Adapter (am besten indem du den Arrayadapter in Kombination mit deiner neuen Klasse überschreibst).

In der zentralen Methode getView wird ein Listenelement zur Laufzeit erzeugt, immer dann wenn es auf dem Bildschirm erscheinen soll, zB beim Scrollen. Du erhälst als Parameter einen Index für das richtige Element aus deinerm Array oder deiner Liste. Mit diesem befüllst du dein ListItem und gibst es zurück.

Alles weitere erklärt der Artikel sehr schön.

Antworten
Kurt G.
  • Forum-Beiträge: 67

25.07.2011, 15:14:07 via Website

so bin jetzt schon ein echtes Stück weiter, habe nun eine Listview, so wie ich sie haben wollte, und bei OnItemClick öffnet sich ein Dialog, nur wie schließe ich diesen Dialog wieder.

Habe schon

dismiss(); -- [The method dismiss() is undefined for the type new View.OnClickListener(){}]
und
dismissDialog(dialog); -- [The method dismissDialog(int) in the type Activity is not applicable for the arguments (Dialog)]

versucht, doch ich erhalte immer nur fehlermeldungen...

Hier mal der Code:

1Dialog dialog = new Dialog(Items.this);
2 dialog.setContentView(R.layout.custom_dialog);
3 dialog.setTitle(bean.getItemtitle());
4 dialog.setCancelable(true);
5 //there are a lot of settings, for dialog, check them all out!
6
7 //set up text
8 TextView text = (TextView) dialog.findViewById(R.id.text0001);
9 text.setText(bean.getitemdescription());
10
11 //set up image view
12 ImageView img = (ImageView) dialog.findViewById(R.id.ImageView01);
13 img.setImageResource(bean.getItemcrafting());
14
15 //set up button
16 Button button = (Button) dialog.findViewById(R.id.CustomDialogButtonCancel);
17 button.setOnClickListener(new OnClickListener() {
18 public void onClick(View v) {
19 dismiss();
20 }
21 });
22
23 //Show Dialog
24 dialog.show();
25 }

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

25.07.2011, 15:15:48 via Website

dein onclicklistener wird das dismiss() nicht mit dem dialog object machen.


mach mal dialog.dismiss()

swordiApps Blog - Website

Antworten
Kurt G.
  • Forum-Beiträge: 67

25.07.2011, 15:18:29 via Website

hi,

erstmal danke für den Tipp, aber leider kommt dann folgende Fehlermeldung

Cannot refer to a non-final variable dialog inside an inner class defined in a different method

Antworten
cypressious
  • Forum-Beiträge: 3

25.07.2011, 15:20:11 via Website

Dann setz dialog doch mal final.

Antworten
Kurt G.
  • Forum-Beiträge: 67

25.07.2011, 15:31:30 via Website

:*):*):*):*)

Upps, hätte ich auch von alleine drauf kommen können...

Aber trotzdem vielen vielen Dank!

Antworten