5

你好

无花果

我想知道这个概念是如何在android中实现的

  • 此应用程序中的导航发生如下:

活动1--到--->活动2--到--.>活动3--到-->活动2

但是这样做::

我从

Activity1-->Activity2-->我没有从Activity2传数据-->Activity3

现在

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

  • 应用程序关闭,因为 Activity2 期待 Activity3 中不存在的数据
  • 我该如何克服这个问题,如何在从 Activity3 导航回来之前保留 Activity 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);
            }
        });



    }



}
4

3 回答 3

3

您可以使用的选项很少。

方法一:

在 Activty 2 中,您可以使用 onSaveInstanceIndtance() 保存一些数据。这个函数只是在 onDestroy 之前调用。在 onCreate() 中,您可以使用 onRetroreInstanceState() 检索保存的数据

方法二:

您可以将数据保存在 sharedPreferences 中。在任何活动中的任何时候,您都可以获得保存在 sharedPreference 中的数据。

方法三:

您可以使用“singleTask”标志开始您的活动2。因此,当从 Activity 3 回到 Activty 2 时,会从堆栈调用前一个实例。在这种情况下,不会为 Activtiy 2 调用 onCreate()。而是会调用 onNewIntent()。

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

于 2013-08-24T16:36:56.363 回答
2

可能这会有所帮助

您有R.layout.activity1R.layout.activity2并且R.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);
            }
        }); 
于 2013-08-24T16:35:13.850 回答
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;

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

于 2013-08-24T16:44:52.393 回答