Geklicktes Item ausblenden

M

muck

Ambitioniertes Mitglied
7
Hallo zusammen,
ich habe eine ListView erstellt. Inhalt ist das Ergebnis einer DB-Abfrage. Nun möchte ich das wenn der User ein Item anglickt das dieses ausgeblendet wird. Ich habe versucht die hier (https://www.android-hilfe.de/forum/...9/problem-mit-listactivity-refresh.46813.html) beschriebene Lösung auf meinen Code zu übertragen aber irgendwie bekomme ich es nicht hin. Für einen Lösungsansatz wäre ich sehr dankbar.
Im Voraus vielen Dank.

Mein Code:
Code:
@Override
public void onCreate(Bundle savedInstanceState) {
 setContentView(R.layout.activity_product_list); 
 super.onCreate(savedInstanceState);
}
public void onStart() {
 ListView listView = showProductList();
}
@Override
protected void onListItemClick(ListView lv, View v, int pos, long id) {
 super.onListItemClick(lv, v, pos, id);
 
    [COLOR=red][B]//Wei kann ich das geglickte Item ausblenden[/B][/COLOR]
 
} 
private ListView showProductList() {
 
    ListView listView = (ListView) findViewById( android.R.id.list );
 
    Cursor productList = dbConn.rawQuery("SELECT _id, count || unit || ' ' || name as sum, isopen FROM products WHERE irshoppinglists = " + longListID + " ORDER BY name", null);
    productListAdapter = new ProductListAdapter (this, R.layout.product_list_view, productList, new String[] {"sum"}, new int[] {R.id.txt_product});
    setListAdapter(productListAdapter);
    startManagingCursor(productList);
 
    return listView;
}
public class ProductListAdapter extends SimpleCursorAdapter {
 
    private int sumIndex = -1;
 
    class ViewHolder {
     private TextView tvSum;
    }
 
    public ProductListAdapter(Context context, int layout, Cursor productList, String[] sum, int[] productIds) {
     super(context, layout, productList, sum, productIds);
 
     sumIndex = productList.getColumnIndex("sum");
    }
 
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
     final View view = super.newView(context, cursor, parent);
     final ViewHolder viewHolder = new ViewHolder();
     viewHolder.tvSum = (TextView) view.findViewById(R.id.txt_product);
     view.setTag(viewHolder);
 
     return view;
    }
 
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
     final ViewHolder viewHolder = (ViewHolder) view.getTag();
     viewHolder.tvSum.setText(cursor.getString(sumIndex));
    }
}

activity_product_list.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:choiceMode="multipleChoice"
/>
</LinearLayout>
product_list_view.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
android:id="@+id/txt_product"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:gravity="center_vertical"
android:checkMark="?android:attr/textCheckMark"
android:paddingLeft="6dip"
android:paddingRight="6dip"
/>
 
Mit ausblenden meine ich "vorübergehend" nicht sichtbar sein. Also sowas wie visibility="gone" und bei Bedarf wieder einblenden.

Ich glaube mittlerweile das ein ListItem nicht ausblendbar ist. Ich habe es bis jetzt noch nicht geschaftt an ein ListItem direkt dran zu kommen. Ich habe schon drüber nachgedacht das evtl. über zwei Arrays zu machen. Also das Ergebnis der DB-Abfrage in Array1 speichern, mit Array1 die ListView füllen. Zum "ausblenden" den Eintrag aus Array1 entfernen und in Array2 zu verschieben. Die zweite Möglichkeit wäre (wenn es die DB unterstützt) das ganze über eine Temporäre Tabele zu lösen.
 
nein ausblenden ist einfach nicht ganz richtig.

du musst das item aus dem adapter entfernen und wieder hinzufügen. eine liste zeigt genau den inhalt des adapters an.

auf visibilty="gone" kannst das adapter item bestimmt auch setzen, aber ist nicht ganz der sinn der sache
 
Ok, danke.

SQLite unterstützt wohl temporäre Tabellen. (muß das aber noch mal genauer lesen)

Jetzt wollte ich das mal schnell mit zwei Arrays versuchen und bin auf folgendes Verhalten gestoßen:
Meine multipleChoiceListView enthält 3 Einträge:
Fahrrad
Auto
Bobycar

In onListItemClick(..) remove ich das geklickte Item
Code:
protected void onListItemClick(ListView lv, View v, int pos, long id) {
    super.onListItemClick(lv, v, pos, id);
        multipleChoiceListView.remove(pos);
}
Wenn ich jetzt z.B. auf Auto klicke, wird Auto entfernt ABER Bobycar als geklickt angezeigt. Also erst wird der Eintrag entfernt und dann
listView.setItemChecked ausfegührt. Kann ich das verhindern?

Im Voraus vielen Dank.
Grüße
 
Views können mit Hilfe von v.setVisibility(View.INVISIBLE) ausgeblendet und mit v.setVisibility(View.VISIBLE) wieder eingeblendet werden:

Code:
TextView v = new TextView(this); // oder irgend ein anderer View
v.setText("Ich bin sichtbar");

[COLOR=#000000][COLOR=#000000][FONT=monospace]v.setVisibility[/FONT][/COLOR][/COLOR][COLOR=#000000][COLOR=#000000][FONT=monospace]([/FONT][/COLOR][/COLOR][COLOR=#000000][COLOR=#000000][FONT=monospace]View.INVISIBLE[/FONT][/COLOR][/COLOR][COLOR=#000000][COLOR=#000000][FONT=monospace])[/FONT][/COLOR][/COLOR][COLOR=#000000][COLOR=#000000][FONT=monospace];[/FONT][/COLOR][/COLOR]
// View ist nun unsichtbar
[COLOR=#000000][COLOR=#000000][FONT=monospace]v.setVisibility[/FONT][/COLOR][/COLOR][COLOR=#000000][COLOR=#000000][FONT=monospace]([/FONT][/COLOR][/COLOR][COLOR=#000000][COLOR=#000000][FONT=monospace]View.[/FONT][/COLOR][/COLOR][COLOR=#000000][FONT=monospace]VISIBLE[/FONT][/COLOR][COLOR=#000000][COLOR=#000000][FONT=monospace])[/FONT][/COLOR][/COLOR][COLOR=#000000][COLOR=#000000][FONT=monospace];[/FONT][/COLOR][/COLOR] // View wieder anzeigen
 

Ähnliche Themen

J
Antworten
5
Aufrufe
929
swa00
swa00
W
Antworten
5
Aufrufe
1.132
washpuda
W
N
Antworten
3
Aufrufe
1.048
no1Ltan
N
Zurück
Oben Unten