1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Geklicktes Item ausblenden

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von muck, 11.03.2011.

  1. muck, 11.03.2011 #1
    muck

    muck Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    7
    Registriert seit:
    07.11.2010
    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 (http://www.android-hilfe.de/android-app-entwicklung/46813-problem-mit-listactivity-refresh.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"
    />
    
     
  2. FelixL, 13.03.2011 #2
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
  3. muck, 14.03.2011 #3
    muck

    muck Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    7
    Registriert seit:
    07.11.2010
    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.
     
  4. swordi, 14.03.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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
     
  5. muck, 14.03.2011 #5
    muck

    muck Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    7
    Registriert seit:
    07.11.2010
    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
     
  6. Martin Wantke, 16.02.2013 #6
    Martin Wantke

    Martin Wantke Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    1
    Registriert seit:
    07.11.2012
    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
    
     

Diese Seite empfehlen