在简单的活动之间导航

时间:2013-08-24 16:27:24

标签: android

您好

fig

我想知道这个概念是如何在android

中实现的
  • 此应用程序中的导航发生方式如下::
  

活动1 - 至 - - - >活动2-至 - 。>活动3 - 至 - - >   活性2

但是这样做了

我从

传递数据
  

活动1 - - >活动2- - >我没有从Activity2传递数据 -    - > Activity3

立即

  

如果我导航回Activity2- - from - - Activity3

  • 应用程序关闭,因为Activity2期待数据 在Activity3
  • 中不存在
  • 我如何克服这个问题,如何保存状态(甚至是数据) 从Activity3导航回来之前的活动2

周期必须是::

  

活动1 - 至 - - - >活动2-至 - 。>活动3 - 至 - - >   活性2


  • 如何实现这个目标?
  • 我需要寻找什么概念

我希望我的描述清楚


我已经提供了一个示例程序来支持我的问题

如何修改代码来实现这个

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1);

        Button BTN=(Button) findViewById(R.id.activity3button3);
        BTN.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
        Intent INT=new Intent(MainActivity.this,Activity2.class);
                INT.putExtra("hi", "HI");
                startActivity(INT);     
            }
        }); 
    }

 }

Activity2.java

public class Activity2 extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2);



        Button BTN=(Button) findViewById(R.id.activity3button3);

        BTN.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent INT=new Intent(Activity2.this,Activity3.class);
                startActivity(INT);

            }
        });

    }



}

Activity3.java

public class Activity3 extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity3);

        Button BTN=(Button) findViewById(R.id.activity3button3);

        BTN.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent INT=new Intent(Activity3.this,Activity2.class);
                startActivity(INT);
            }
        });



    }



}

3 个答案:

答案 0 :(得分:3)

您可以使用的选项很少。

方法1:

  

在Activty 2中,您可以使用onSaveInstanceIndtance()保存一些数据。   在onDestroy之前调用此函数。在onCreate()中你可以   使用onRetroreInstanceState()

检索保存的数据

方法2:

  

您可以将数据保存在sharedPrefernces中。在任何活动的任何一点   您可以将数据保存在sharedPreference中。

方法3:

  

您可以使用“singleTask”标志启动您的activity2。来吧   从Activity 3返回到Activty 2,将调用前一个实例   从堆栈。在这种情况下,不会为Activtiy 2调用onCreate()。   而是将调用onNewIntent()。

您可以根据需要使用其中一种。

答案 1 :(得分:2)

可能会有所帮助

您有R.layout.activity1R.layout.activity2R.layout.activity3,因为您需要为所有人提供单独的按钮,但您已为所有人提供了R.id.activity3button3一个按钮,因此最好创建三个按钮三个活动的按钮

Button BTN=(Button) findViewById(R.id.activity1button1);
        BTN.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                     Intent ide = new Intent(MainActivity.this,Activity2.class);
                     ide .putExtra("hi", "HI");
                 ide.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                     startActivity(ide);
            }
        }); 



  Button BTN=(Button) findViewById(R.id.activity2butto2);
            BTN.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                         Intent ide = new Intent(Acitvity2.this,Acitvity3.class);
                         ide .putExtra("hi", "HI");
                         ide.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                         startActivity(ide);
                }
            }); 

Button BTN=(Button) findViewById(R.id.activity3button3);
        BTN.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                     Intent ide = new Intent(Acitvity3.this,Acitvity2.class);
                     ide .putExtra("hi", "HI");
                 ide.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                     startActivity(ide);
            }
        }); 

答案 2 :(得分:0)

解决方案1 ​​是保持传递值:

Intent INT=new Intent(Activity2.this,Activity3.class);
INT.putExtra("hi", getIntent().getStringExtra("hi","error");
startActivity(INT);

再次

Intent INT=new Intent(Activity3.this,Activity2.class);
INT.putExtra("hi", getIntent().getStringExtra("hi","error");
startActivity(INT);

解决方案2 是创建一个静态变量,该变量将保存值,并且可以在整个应用程序中访问。

public class DataHolder {
    public static String hi;
}

并且在Activity2中而不是从Bundle中获取值,只需从DataHolder中获取它:

String hi = DataHolder.hi;

这是我首先想到的两件事。