Galerie mit Filterfunktion (über Checkbox)- Sichtbarkeit Bilder auswählbar

M

madgnoll

Neues Mitglied
0
Hallo zusammen,

ich bin Android/Java Beginner und tüftle gerade an einer Bildergalerie. Bei dieser sollen sich einzelne Bilder der Galarie ausblenden lassen. Also wie eine Filterfunktion.
Eclipse zeigt mir keinen Fehler an. Leider stürzt aber die App bei Betätigung der Checkbox ab.
Vor dem Einbau der "Filterfunktion"/Checkbox hat die Galerie fehlerfrei funktioniert.:confused2:
Woran könnte dies liegen bzw. wo liegt mein Fehler?

Vielen Dank im Voraus für Eure Antworten,
Beste Grüße,
madgnoll



Code:
package com.example.bildergalarie;




import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;
 
@SuppressWarnings("deprecation")
public class MainActivity extends Activity {
//the images to display
Integer[] imageIDs = {
R.drawable.eins,
R.drawable.zwei,
R.drawable.drei,

};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Note that Gallery view is deprecated in Android 4.1---
Gallery gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position,long id)
{
Toast.makeText(getBaseContext(),"pic" + (position + 1) + " selected",
Toast.LENGTH_SHORT).show();
// display the images selected
ImageView imageView = (ImageView) findViewById(R.id.image1);
imageView.setImageResource(imageIDs[position]);
}
});
}
 
public class ImageAdapter extends BaseAdapter {
private Context context;
private int itemBackground;
public ImageAdapter(Context c)
{
context = c;
// sets a grey background; wraps around the images
TypedArray a =obtainStyledAttributes(R.styleable.MyGallery);
itemBackground = a.getResourceId(R.styleable.MyGallery_android_galleryItemBackground, 0);
a.recycle();
}
// returns the number of images
public int getCount() {
return imageIDs.length;
}
// returns the ID of an item
public Object getItem(int position) {
return position;
}
// returns the ID of an item
public long getItemId(int position) {
return position;
}
// returns an ImageView view
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
imageView.setImageResource(imageIDs[position]);
imageView.setLayoutParams(new Gallery.LayoutParams(100, 100));
imageView.setBackgroundResource(itemBackground);
return imageView;
}
}
public void itemClicked(View v) {
    CheckBox checkBox1 = (CheckBox)v;
    
    if  (checkBox1.isChecked()){
        
        ImageView imageView1 = (ImageView) findViewById(R.drawable.eins);
        imageView1.setVisibility(View.VISIBLE);
        
    } else {
        ImageView imageView1 = (ImageView) findViewById(R.drawable.eins);
        imageView1.setVisibility(ImageView.GONE);
    }
}
}
Code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="{relativePackage}.${activityClass}"
    android:orientation="vertical" >
 
    <Gallery
        android:id="@+id/gallery1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
    <ImageView
        android:id="@+id/image1"
        android:layout_width="215dp"
        android:layout_height="315dp"
        android:layout_gravity="center_horizontal"
        android:background="#cfcfcf"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:src="@drawable/eins" />

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="22dp"
        android:onClick="itemClicked"
        android:text="CheckBox" />

</LinearLayout>
 
Du hast ein NullPointerException.

Die id deines ImageView ist R.id.image1 und nicht R.drawable.eins.

Schreibe einfache:
Code:
ImageView imageView1 = (ImageView) findViewById(R.id.image1);
 
Hallo,

vielen Dank für Deine Antwort.

Die Variante hatte ich vorher auch als Code. Leider verschwindet dann das "vergrößerte" Bild und nicht das jeweilige von der Bildübersicht.
Weißt du, wie ich erreichen kann, dass eines der "kleinen, nicht maximierten" Bilder per Häkchen verschwindet?

Danke und beste Grüße,
madgnoll
 
Dafür brauchst du die Position des angezeigten Bildes in der Gallerie. Die bekommst du in der Methode:
Code:
public void onItemClick(AdapterView<?> parent, View v, [COLOR=Red]int position[/COLOR],long id)
Die Position weist du einer Feld-Variable zu, auf der du dann in der Methode
Code:
public void itemClicked(View v)
zugreifst.
Ungefähr so:
Code:
gallery.setSelected(true);
gallery.setSelection([COLOR=Red]position[/COLOR]);
 
Hallo,

vielen Dank für Deine Antwort und Deine Hilfe.
Meinst du so? Irgenwie zeigt mir Eclipse weiterhin Fehler an :-(
Danke für Deine Geduld.
Beste Grüße,
madgnoll

HTML:
public void itemClicked(View v) {
    CheckBox checkBox1 = (CheckBox)v;
    
    if  (checkBox1.isChecked()){
        
        ImageView imageView1 = (ImageView) findViewById(R.id.image1);
        imageView1.setVisibility(View.VISIBLE);
        
    } else {
        ImageView imageView1 = (ImageView) findViewById(R.id.image1);
        imageView1.setVisibility(ImageView.GONE);
    }
}


public int onItemClick(AdapterView<?> parent, View v, int position,long id) {
 int [] position = new int [1] ;
}
public void itemClicked1(View v){
    gallery.setSelected(true);
    gallery.setSelection(position);
}
 
Hallo zusammen,

hätte noch jemand einen Tipp für mich?

Vielen lieben Dank und beste Grüße,
madgnoll
 

Ähnliche Themen

B
Antworten
6
Aufrufe
1.063
jogimuc
J
S
Antworten
4
Aufrufe
4.638
mblaster4711
mblaster4711
P
Antworten
5
Aufrufe
3.925
MisterRoboto
MisterRoboto
Zurück
Oben Unten