| |||||||
Das Thema "einzelne Textelemente einer ListView ändern" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
| ich würde gerne im nachhinein, je nach dem welchen Status meine Strings in der ListView haben, die Textfarbe anpassen. z.B. nach dem motto aString.getState(); --> böses a --> Färbe den Text in der ListView rot darstellen. Meine liste baue ich so zusammen: list.setAdapter(new ArrayAdapter<String>(this, (R.layout.main),items)); items.add("a: " + aString); items.add("b: " +bString); items.add("c: " + cString); a b und cString bekomme ich von einer anderen Activity. Dort wird auch der Status der Strings festgelegt und mit an die ListViewActivity übergeben. Ich hoffe jemand kennt eine Lösung zu dem Problem (oder hat mehr Googleskill als ich )MfG nijoX Geändert von nijoX (16.09.2011 um 10:15 Uhr) |
| | |
| | #2 (permalink) |
| Erfahrener Benutzer Modell: G1 DevPhone / SGS2 / SGT10.1v Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
|
du musst die getView-Methode vom ArrayAdapter überschreiben und dort die Farbe setzen.
|
| | |
| | #3 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
|
Hab das mit der getView Methode überschreiben mal versucht aber ich bekomm es einfach nicht hin wäre es möglich eine genauere Beschreibung zu geben wie ich die getView Methode so überschreiben kann das es einzelne Elemente färben kann. MfG nijoX |
| | |
| | #4 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
poste doch mal den code von deinem adapter, dann kann vielleicht besser geholfen werden ;-)
|
| | |
| | #5 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
|
genau da liegt das Problem ich steh mit dem eigenem Adapter schreiben total aufm Schlauch. Hab mir schon einige Beispiele im Netz angeschaut, selber versucht per Doku einen Adapter aufzubauen, aber bis jez hat nichts auch nur im Ansatz funktioniert. Momentan sieht der Adapter nur noch so aus. Code: public final class myArrayAdapter extends ArrayAdapter<String>{
private LayoutInflater layoutinf;
private int i;
public myArrayAdapter(Context context, int resource, int textViewResourceId, int i) {
super(context, resource, textViewResourceId);
this.i = i;
layoutinf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
/**setzen der nächsten textview je nach dem welches i übergeben
*wurde. die textviews sind jeweils in eigenen xml datein gespeichert*/
convertView = layoutinf.inflate(i, null);
return convertView;
}
} xml Code zu den Textviews: HTML-Code: <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/warnmessage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="10dp" android:textSize="16sp" android:textColor="#0ff" android:textStyle="italic"> </TextView> ![]() Hoffe das mir jetzt jemand weiter"er" helfen kann ![]() MfG nijoX |
| | |
| | #6 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
Also zuerst einmal würde ich deinem Array-Adapter auch das tatsächliche Objekt übergeben und nicht nur einfach nen String. Weil, wie willst du sonst später auf .getState() zugreifen um zu entscheiden, welche Farbe du setzen willst? Hier ist mal ein Adapter von mir, der das Objekt "DBItem" handelt: Code: package comet.android;
import java.text.SimpleDateFormat;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class DBItemArrayAdapter extends ArrayAdapter<DBItem> {
int resource;
private SimpleDateFormat sdf;
private TableLayout dbItemsView;
public DBItemArrayAdapter(Context context, int resourceId, List<DBItem> dbItems) {
super(context, resourceId, dbItems);
this.resource = resourceId;
this.sdf = new SimpleDateFormat("dd.MM.yyyy");
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
DBItem item = getItem(position);
if (convertView == null) {
dbItemsView = new TableLayout(getContext());
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(resource, dbItemsView, true);
}
else {
dbItemsView = (TableLayout)convertView;
}
TextView id = (TextView)dbItemsView.findViewById(R.id.tv_item_id);
TextView name = (TextView)dbItemsView.findViewById(R.id.tv_item_name);
TextView vorname = (TextView)dbItemsView.findViewById(R.id.tv_item_vorname);
TextView datum = (TextView)dbItemsView.findViewById(R.id.tv_item_datum);
TextView flag = (TextView)dbItemsView.findViewById(R.id.chk_item_flag);
id.setText(item.getId().toString());
name.setText(item.getName());
vorname.setText(item.getVorname());
datum.setText(item.getDatum());
flag.setText(sdf.format(item.getDate()));
final TableRow rowItem = (TableRow)dbItemsView.findViewById(R.id.item_row);
if (position % 2 == 0) {
rowItem.setBackgroundResource(R.drawable.drawable_even_color);
}
else {
rowItem.setBackgroundResource(R.drawable.drawable_odd_color);
}
return dbItemsView;
}
} Code: dbItems = new ArrayList<DBItem>();
itemsAdapter = new DBItemArrayAdapter(this, R.layout.table_item_new, dbItems);
listView.setAdapter(itemsAdapter); Wenn du getView() überschreibst, dann machst du quasi selbst das Mapping (die Zuordnung der Daten zu den einzelnen Widgets wie TextView, EditText, etc.). Über die IDs kannst du dir die Widgets holen (z.b. TextView id = (TextView)dbItemsView.findViewById(R.id.tv_item_id ) und dann z.b. den Text setzen/ändern (z.b. id.setText(item.getId().toString()) oder andere Eigenschaften setzen, u.a. könntest du dann hier z.b. die Textfarbe ändern (z.b. id.setTextColor(Color.RED) .In deinem Fall mußt du halt je nach Status die Farbe setzen, dafür brauchst du dein Objekt, um auf den Status hier zugreifen zu können. Also DBItem mußte dann gegen dein Objekt austauschen. Ich glaube, du brauchst dann auch nur eine Layout-Datei, wenn du nur die Farben ändern mußt. Hoffe, das hilft dir weiter :-) |
| | |
| Folgender Benutzer bedankt sich bei Tom299 für diesen Beitrag: | nijoX (20.09.2011) |
| | #7 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
|
Den Status geb ich Momentan in einem String Array mit Code: String[] data = {"Value", "1"};
nextActivity.putExtra(name, data); Weiter is auch noch das Problem das ichs so nicht bnachbauen kann (zumindest nicht genau so), da es vorher der nextActivity unbekannt ist wie viele Elemente es schließlich werden. Werd mich jetzt aber erstmal mit deiner Hilfe weiter dran versuchen ... Ich melde mich dann ob es geklappt hat ![]() MfG nijoX |
| | |
| | #8 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
Schau dir vielleicht mal noch zum Theme Parcelable folgende Links an: Parcelable | Android Developers Tech Droid: Parcelable - How to do that in Android Android – Parcel data to pass between Activities using Parcelable classes | words on sand Damit kannste startActivity dein Objekt übergeben anstatt einzeln alle Felder mit putExtra. |
| | |
| Folgender Benutzer bedankt sich bei Tom299 für diesen Beitrag: | nijoX (22.09.2011) |
| | #9 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
|
Hab mein Problem nun gelöst bekommen. Für alle die ebenfalls auf so ein Problem stoßen hier meine Lösung Code: public final class OwnAdapter extends ArrayAdapter<String[]>{
List<String[]> array;
public OwnAdapter(Context context, int resourceId, List<String[]> array) {
super(context, resourceId, array);
this.array = array;
}
public View getView (int position, View convertView, ViewGroup parent){
TextView v = (TextView)super.getView(position, convertView, parent);
String[] temp = array.get(position);
if(temp[1].equals("0")){
v.setText(temp[0]);
Log.i("STRING", temp[0]+" "+position+" normal");
v.setTextColor(Color.BLUE);
}else if(temp[1].equals("1")){
v.setText(temp[0]);
Log.i("STRING", temp[0]+" "+position+" warnung");
v.setTextColor(Color.YELLOW);
}else if(temp[1].equals("2")){
v.setText(temp[0]);
Log.i("STRING", temp[0]+" "+position+" Kritisch");
v.setTextColor(Color.RED);
}
return v;
} ist nicht die besste Lösung mit einem String[] zu Arbeiten aber wird noch gefixt und bald als Parcelable Objekt an den Adapter gegeben MfG nijoX |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Wie verhindere ich ruckeln beim Scrollen einer ListView mit ImageView-Elementen? | ChemDroid | Android App Entwicklung | 6 | 09.05.2011 18:16 |
| listView.setChoiceMode() in einer custom ListView | mr.freeze | Android App Entwicklung | 0 | 16.02.2011 09:57 |
| Wie bekomme ich daten aus einer ListView? | MilesTeg | Android App Entwicklung | 2 | 04.12.2010 19:19 |
| Einzelne Elemente einer Webseite abgreifen | isaak | Android App Entwicklung | 5 | 15.06.2010 23:57 |
| ListView in einer Klasse ansprechen | Manfred | Android App Entwicklung | 1 | 13.02.2009 08:36 |