Бутоните за изображения губят изображения при промяна на ориентацията

Имам няколко страници, реализирани с PagerAdapter и един файл с оформление в папката "res/layout" и един файл с оформление в "res/layout-land". Всеки Layout има два ImageButtons, където:

  • imageButton1 в портрет има същия идентификатор като imageButton1 в пейзаж.
  • imageButton2 в портрет има същия идентификатор като imageButton2 в пейзаж.

Присвоих onClickListener на бутона imageButton1, който:

  • взема изображенията от ImageButtons
  • премащабира изображенията, за да пасне/запълни ImageButtons
  • и присвоява повторно мащабираните картини на ImageButtons.

Но всеки път, когато променя ориентацията в своя емулатор, изображенията/картините в тези бутони се губят или се променят към изображенията, посочени във файла с оформлението първоначално, и не се опресняват до картините, които съм присвоил програмно на бутоните.

PS (например): зададох в onCreate слушател на button1 и този слушател работи за този бутон както в портретна, така и в пейзажна ориентация. Така че това не са отделни бутони!!!!!!

Въпрос: Как мога да накарам изображенията да не се губят при промяна на ориентацията?

благодаря за всякаква помощ предварително!

ето моят код:

layout-portrait файл:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/table1"
android:background="@drawable/shape" 
android:gravity="center"
>

<!-- Row 1-->

<LinearLayout
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:layout_height="fill_parent" 
        android:layout_weight="1"
        android:gravity="center">

    <LinearLayout
            android:id="@+id/layout11"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"  
            android:layout_weight="1"
            android:background="@drawable/shape" >

         <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <LinearLayout
            android:id="@+id/layout12"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:layout_weight="1"
            android:background="@drawable/shape" >

         <ImageButton
            android:id="@+id/imageButton2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

</LinearLayout>

layout-landscape file:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/table1"
android:background="@drawable/shape" 
android:gravity="center"
>


<LinearLayout
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:layout_height="fill_parent" 
        android:layout_weight="1"
        android:gravity="center">

    <LinearLayout
            android:id="@+id/layout11"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"  
            android:layout_weight="1"
            android:background="@drawable/shape" >

         <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <LinearLayout
            android:id="@+id/layout12"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:layout_weight="1"
            android:background="@drawable/shape" >

         <ImageButton
            android:id="@+id/imageButton2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:src="@drawable/ic_launcher" />
    </LinearLayout>


</LinearLayout>

MyPageAdapter-class:

   package com.example.Pagercheck;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;

public class MyPageAdapter extends PagerAdapter 
{
     List<View> pages = null;
    public MyPageAdapter(List<View> pages) 
    {
        this.pages = pages;
     }


    @Override
    public int getCount() 
    {
        return pages.size();

    }

    @Override
    public boolean isViewFromObject(View view, Object object) 
    {
        return view.equals(object);
    }


    @Override
    public Object instantiateItem(View collection, int position)
    {
        View v = pages.get(position);
        ((ViewPager) collection).addView(v, 0);
        return v;
    }

    @Override
    public void destroyItem(View collection, int position, Object view)
    {
        ((ViewPager) collection).removeView((View) view);
    }




    @Override
    public void finishUpdate(View arg0) {
    }

    @Override
    public void startUpdate(View arg0) {
    }


}

Моят клас MainActivity:

    package com.example.Pagercheck;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup.MarginLayoutParams;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity  implements OnClickListener
{
    private List<View> pages;
    private MyPageAdapter pagerAdapter;
    private ViewPager viewPager;
    private static Context context; //member zum speichern für context für andere Klassen
    public static Context getContext(){ return context;}    //context für andere Klassen zugänglich machen
    //private Button btn1;


    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        context = this; //context in member speichern

        LayoutInflater inflater = LayoutInflater.from(this);
        pages = new ArrayList<View>();

        View page = inflater.inflate(R.layout.page, null);                              
        pages.add(page);

        page = inflater.inflate(R.layout.page, null);
        pages.add(page);

        page = inflater.inflate(R.layout.page, null);
        pages.add(page);

        page = inflater.inflate(R.layout.page, null);
        pages.add(page);

        page = inflater.inflate(R.layout.page, null);
        pages.add(page);


        pagerAdapter = new MyPageAdapter(pages);
        viewPager = new ViewPager(this);
        viewPager.setAdapter(pagerAdapter);
        viewPager.setCurrentItem(0);    

        setContentView(viewPager);      

        for (int i_page=0;i_page<pages.size();i_page++)
        {
            //Drag-Listener auf ImageButtons:
            pages.get(i_page).findViewById(R.id.imageButton1).setOnLongClickListener(new MyLongClickListener());
            pages.get(i_page).findViewById(R.id.imageButton1).setOnClickListener(this);
            pages.get(i_page).findViewById(R.id.imageButton2).setOnLongClickListener(new MyLongClickListener());


            //Drag-Listener auf LinearLayouts:
            pages.get(i_page).findViewById(R.id.layout11).setOnDragListener(new MyDragListener());
            pages.get(i_page).findViewById(R.id.layout12).setOnDragListener(new MyDragListener());


        }

        super.onCreate(savedInstanceState);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {

        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
     public void onWindowFocusChanged(boolean hasFocus) 
    {
      // TODO Auto-generated method stub
      super.onWindowFocusChanged(hasFocus);

      //NOTE FOR STACKOVERFLOW
      //I COMMENTED THIS OUT SO THAT MY IMAGE BUTTONS DOESNT GET LOST AFTER PAGE 2 SO THAT I CAN TEST MY APP PROPERLY WITH ONCLICK:

//    Bitmap bmp_stift=BitmapFactory.decodeResource(getContext().getResources(), R.drawable.stift);
//      
//      for (int i_page=0;i_page<pages.size();i_page++)
//      { 
//  
//        ((ImageButton)pages.get(i_page).findViewById(R.id.imageButton1)).setImageBitmap(bmp_stift);
//        scalePictureToFitButtom((ImageButton)pages.get(i_page).findViewById(R.id.imageButton1));    
//        scalePictureToFitButtom((ImageButton)pages.get(i_page).findViewById(R.id.imageButton2));
//  
//      
//      }


     }

    public void scalePictureToFitButtom(ImageButton img_btn)
    {

        int width=img_btn.getWidth();
        int height=img_btn.getHeight();

        BitmapDrawable draw=(BitmapDrawable)img_btn.getDrawable();
        Bitmap bmp = ((BitmapDrawable)draw).getBitmap();       
        Bitmap resized = Bitmap.createScaledBitmap(bmp, width-40, height-40, true); //bissle schmaler und niedriger damit man noch den Klickeffekt sieht


        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        params.width=width;
        params.height=height;
        img_btn.setImageBitmap(resized);
        img_btn.setLayoutParams(params);
        pagerAdapter.notifyDataSetChanged();
    }


    @Override
    public void onClick(View view) 
    {
        Bitmap bmp_stift=BitmapFactory.decodeResource(getContext().getResources(), R.drawable.stift);

        for (int i_page=0;i_page<pages.size();i_page++)
        { 

          ((ImageButton)pages.get(i_page).findViewById(R.id.imageButton1)).setImageBitmap(bmp_stift);
          scalePictureToFitButtom((ImageButton)pages.get(i_page).findViewById(R.id.imageButton1));    
          scalePictureToFitButtom((ImageButton)pages.get(i_page).findViewById(R.id.imageButton2));


        }



         Toast einToast = Toast.makeText(view.getContext(), "clicked",  Toast.LENGTH_SHORT);
         einToast.show();

    }

}

person treesoft    schedule 07.03.2014    source източник
comment
Здравей maltonic42, можеш ли да добавиш своето решение като отговор и да го приемеш, моля.   -  person bummi    schedule 11.04.2014
comment
можете да приемете собствения си отговор, зелена отметка до вашия отговор.   -  person bummi    schedule 14.04.2014


Отговори (1)


АКТУАЛИЗАЦИЯ:

сега го направих така (пример за запазване и възстановяване на Bitmap на imageButton1):

 @Override
protected void onSaveInstanceState(Bundle outState) 
{
 // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);

    BitmapDrawable draw=(BitmapDrawable)((ImageButton)pages.get(0).findViewById(R.id.imageButton1)).getDrawable();
    Bitmap bmp = ((BitmapDrawable)draw).getBitmap();       

    outState.putParcelable("IMG_OF_BUTTON1", bmp);


    super.onSaveInstanceState(outState);

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) 
{
 // TODO Auto-generated method stub
 super.onRestoreInstanceState(savedInstanceState);


 Bitmap bmp=     savedInstanceState.getParcelable("IMG_OF_BUTTON1");
 ((ImageButton)pages.get(0).findViewById(R.id.imageButton1)).setImageBitmap(bmp);


}
person treesoft    schedule 12.04.2014