首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Button设置为返回到以前的布局

将Button设置为返回到以前的布局
EN

Stack Overflow用户
提问于 2018-09-23 02:14:05
回答 2查看 1.2K关注 0票数 0

我是安卓工作室的新手

我正在Android Studio中构建一个关于GIRDVIEW图像的程序。我设置了2 layout:- activity_main.xml:layout1以显示Girdview图像-- layout2:solo_picture.xml只显示一个Pictuter和1个Back按钮,以帮助返回布局1当用户单击它时,.I有MainActivity.java和MyImageAdapter.java (包括代码)--这是一个问题:当我单击Back按钮时,无法返回layout1。不过,我用了:

代码语言:javascript
复制
 //want to use-save state values
Bundle myOriginalMemoryBundle;
myOriginalMemoryBundle = savedInstanceState;

.

//设置后退按钮以返回到layout1 (GridView)

代码语言:javascript
复制
btnSoloBack = (Button) findViewById(R.id.btnSoloBack);
btnSoloBack.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // redraw the main screen showing the layout1
              onCreate(myOriginalMemoryBundle);
            }
        });

我不知道调试时为什么myOriginalMemoryBundle = NULL。之后,我的程序停止了,我不能返回layout1继续活动.帮帮你,求你..。非常感谢<3 MainActivity.java

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

        //GUI control bound to screen1 (holding GidView)
        GridView gridview;
        //GUI controls bound to screen2 (holding single ImageView)
        TextView txtSoloMsg;
        ImageView imgSoloPhoto;
        Button btnSoloBack;
        //in case you want to use-save state values
        Bundle myOriginalMemoryBundle;

        String[] items = {"Photo-1", "Photo-2", "Photo-3", "Photo-4", "Photo-5",
                "Photo-6", "Photo-7", "Photo-8", "Photo-9", "Photo-10", "Photo-11",
                "Photo-12", "Photo-13", "Photo-14", "Photo-15",};
        Integer[] thumbnails={R.drawable.pic01_small,R.drawable.pic02_small,R.drawable.pic03_small,
                R.drawable.pic04_small,R.drawable.pic05_small,R.drawable.pic06_small,
                R.drawable.pic07_small,R.drawable.pic08_small,R.drawable.pic09_small,
                R.drawable.pic11_small,R.drawable.pic11_small,R.drawable.pic12_small,
                R.drawable.pic13_small,R.drawable.pic14_small,R.drawable.pic15_small};
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            myOriginalMemoryBundle = savedInstanceState;
            setContentView(R.layout.activity_main);
            // setup GridView with its custom adapter and listener
            gridview = (GridView) findViewById(R.id.gridview);
            gridview.setAdapter(new MyImageAdapter(this, thumbnails));
            gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    showBigScreen(position);
                }
            });
        }//onCreate
        private void showBigScreen(int position) {
            // show the selected picture as a single frame in the second layout
            setContentView(R.layout.solo_picture);
            // plumbing – second layout
            txtSoloMsg = (TextView) findViewById(R.id.txtSoloMsg);
            imgSoloPhoto = (ImageView) findViewById(R.id.imgSoloPhoto);
            // set caption-and-large picture
            txtSoloMsg.setText(" Position= " + position + " " + items[position]);
            imgSoloPhoto.setImageResource( thumbnails[position] );
            // set GO BACK button to return to layout1 (GridView)
            btnSoloBack = (Button) findViewById(R.id.btnSoloBack);
            btnSoloBack.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    // redraw the main screen showing the GridView
                  onCreate(myOriginalMemoryBundle);
                }
            });
        }// showBigScreen
    }//Activity

MyImageAdapter.java

代码语言:javascript
复制
public class MyImageAdapter extends BaseAdapter{
    private Context context; // main activity’s context
    Integer[] smallImages; // thumbnail data set
    public MyImageAdapter(Context mainActivityContext,
                          Integer[] thumbnails) {
        context =mainActivityContext;
        smallImages = thumbnails;
    }
    // how many entries are there in the data set?
    public int getCount() {
        return smallImages.length;
    }
    // what is in a given 'position' in the data set?
    public Object getItem(int position) {
        return smallImages[position];
    }
    // what is the ID of data item in given 'position‘?
    public long getItemId(int position) {
        return position;
    }
    // create a view for each thumbnail in the data set
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        // if possible, reuse (convertView) image already held in cache
        if (convertView == null) {
            // no previous version of thumbnail held in the scrapview holder
            // define entry in res/values/dimens.xml for grid height,width in dips
            // <dimen name="gridview_size">100dp</dimen>
            // setLayoutParams will do conversion to physical pixels
            imageView = new ImageView(context);
            int gridsize = context.getResources().getDimensionPixelOffset(R.dimen.gridview_size);
            imageView.setLayoutParams(new GridView.LayoutParams(gridsize, gridsize));
            //imageView.setLayoutParams(new GridView.LayoutParams(100, 100));//NOT a good practice
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageView.setPadding(5, 5, 5, 5);
        } else {
            imageView = (ImageView) convertView;
        }
        imageView.setImageResource(smallImages[position]);
        imageView.setId(position);
        return imageView;
    }//getView

}//MyImageAdapter
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-23 03:01:24

与在同一活动中定义第二个布局不同,您只需为布局"R.layout.solo_picture“定义另一个活动。

然后将选定的图像数据从activity1解析到activity2。

当您从activity2向后按回activity1时,Android将自动恢复您以前的数据。

对不起我的英语不好。英语不是我的主要语言。

使用意图解析活动之间的数据:

在activity1上:

代码语言:javascript
复制
Intent intent1 = new Intent(activity1.this, activity2.class);
intent1.putExtra("item", items[position]);
intent1.putExtra("thumbnail", thumbnails[position])
startActivity(intent1);

在activity2上:

代码语言:javascript
复制
Intent intent    = getIntent();
String item      = intent.getIntExtra("item", "");
String thumbnail = intent.getStringExtra("thumbnail", 0);
票数 0
EN

Stack Overflow用户

发布于 2018-09-23 03:45:34

为布局solo_picture.xml.定义另一个活动假设您有两个活动: MainActivity和Activity2,以及两个布局: activity_main.xml和solo_picture.xml。然后,用onCreate方法编写以下代码。

MainActivity.java

代码语言:javascript
复制
setContentView(R.layout.activity_main);
Button button = (Button) findViewById((R.id.btn1));
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, Activity2.class);
            startActivity(intent);
        }
    });

Activity2.java

代码语言:javascript
复制
setContentView(R.layout.activity2); // R.layout.solo_picture in your case
Button button = (Button) findViewById(R.id.btn2);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Activity2.this, MainActivity.class);
            startActivity(intent);
        }
    });

现在,您可以返回到第一个布局点击按钮2或按后退按钮的硬件。

确保编辑AndroidManifest.xml文件。在此文件中添加Activity2。

代码语言:javascript
复制
<activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>
<activity android:name=".Activity2"></activity>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52462404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档