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

probleme mit custom widget/Gallery

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von jim, 01.12.2011.

  1. jim, 01.12.2011 #1
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    Hallo liebes Forum,

    ich habe mein Problem schon in einem englisch sprachigen Forum gepostet. Leider ohne Erfolg(oder mein englisch ist schlecht :-( )

    Zu meinem Problem:
    Ich habe mir ein Custom Widget zum ersten mal selber erstellt und habe nun Probleme Instanzen davon zu verändern. Mein Widget ist eine einfache Gallery mit links und rechts zwei Button.

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    
    
    <merge xmlns:android="http://schemas.android.com/apk/res/android">       
        <ImageButton android:id="@+id/toLeft"
        android:background="@drawable/arrow_left"
            android:layout_width="wrap_content"
            android:layout_height="40dip"
            android:layout_marginBottom="1dip" />
        <Gallery
            android:id="@+id/gallery"
            android:layout_width="fill_parent"
            android:layout_height="40dip"
            android:layout_toRightOf="@+id/toLeft"
            android:spacing="40dip"
            android:scrollbars="horizontal"/>
    
        <ImageButton android:id="@+id/toRight"
            android:background="@drawable/arrow_right"
            android:layout_width="wrap_content"
            android:layout_height="40dip" 
            android:layout_toRightOf="@+id/gallery" />
    </merge>
    Die dazughörige Klasse:

    Code:
      public class GallerySlider extends RelativeLayout implements OnClickListener {
        private ArrayAdapter<String> adapter;
    private Gallery gallery;
    private ImageButton toLeftBtn = null;
    private ImageButton toRightbtn = null;
    
    public GallerySlider(Context context) {
         super(context, null);   
         init(context);
    }
    
    public GallerySlider(Context context, AttributeSet attrs) {
         super(context, attrs);
         init(context);
    }
    
    public GallerySlider(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs);
         init(context);
    }
    
    public void init(Context ctx){
        LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
        inflater.inflate(R.layout.customGallery, this, true);
    
        toLeftBtn = (ImageButton) findViewById(R.id.toLeft);
        toLeftBtn.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                if(gallery.getSelectedItemPosition() > 0){
                    gallery.setSelection(gallery.getSelectedItemPosition()-1);
                }
            }
    
        });
    
        toRightbtn = (ImageButton) findViewById(R.id.toRight);
        toRightbtn.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
                if(gallery.getSelectedItemPosition() < gallery.getAdapter().getCount()-1){
                    gallery.setSelection(gallery.getSelectedItemPosition()+1);
                }
            }
    
        });
        adapter = new ArrayAdapter<String>(ctx, android.R.layout.simple_gallery_item, new String[] {"1","1",
                                                                                                        "1")});
        gallery = (Gallery) findViewById(R.id.gallery);
        gallery.setBackgroundResource(R.drawable.h_sliderl);
        gallery.setAdapter(adapter);
    }
    
    
    
    @Override
    public void onClick(DialogInterface dialog, int which) {
    
        switch(which){
        case R.id.toLeft:   gallery.setSelection(gallery.getFocusedChild().getId()-1);
                            break;
    
        case R.id.toRight:  gallery.setSelection(gallery.getFocusedChild().getId()+1);
                            break;
        }
    
    }
    
    
    public void setNewAdapter(ArrayAdapter<String> _adapter){
    
            gallery.setAdapter(_adapter);
            ((ArrayAdapter) gallery.getAdapter()).notifyDataSetChanged ();
    }

    Ziel ist es jetzt mehrer Instanzen von dem Widget zu verwenden, ich habe ein kleines Beispiel probiert und leider kann ich wie gesagt keine Eigenschaften des Widgets nach dem instanziieren verändern und ich sehe das Problem nicht(es kommt auch keine Error...).

    Der Code meines Minimalbsp.:
    Code:
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout lineLayout = (LinearLayout) findViewById(R.id.lin_layout);
        ViewStub st3 = new ViewStub(TestwidgetActivity.this);
        LinearLayout.LayoutParams paramst3 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lineLayout.addView(st3,paramst3);
        st3.setLayoutResource(R.layout.test);
        st3.inflate();
        GallerySlider gSlider= (GallerySlider) View.findViewById(R.id.choose);
        gSlider.setNewAdapter( new ArrayAdapter<String>(this, android.R.layout.customGallery, new String[] {"1 ","2","3","4"}));
    }
    Hier die dazugehörige layout xml
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lin_layout"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
     <com.Test.GallerySlider
         android:id="@+id/choose"
         android:layout_span="2"
         android:layout_width="300dip"
         android:layout_height="wrap_content"    />
    
    </LinearLayout>

    In der Gallery müssten eigentlich die Zahlen 1,2,3,4 später angezeigt werden.. leider sind nur die Werte , welche ich beim instanziieren benutze, vorhanden. Ich finde den Fehler leider nicht.. . Log lohnt sich nicht da nichts drin steht und kein Fehler geworfen wird... . Hat Jemand eine Idee?
    LG Jim
     

Diese Seite empfehlen