多个活动实例问题

时间:2011-01-25 12:32:27

标签: android

在我的应用程序中,我有一个活动类A,它有一个带有游标适配器的列表视图。 从A我可以通过按下按钮进入活动B.从B我可以通过按下按钮返回A(而不是按BACK按钮)。这意味着创建了A活动的新实例。

从这一点开始,如果按下BACK键,则会破坏当前的A活动并弹出B.如果我再次按BACk,则会弹出初始A活动。我希望很清楚。

我的问题是,当第二个A活动被销毁时,数据库连接会以静态方式重置。因此,最后,当显示初始A活动时,列表视图将为空。

我的问题是:我应该尝试为A活动创建一个实例,还是应该更改数据库连接(将其与活动实例链接)?

非常感谢 的Gratzi

3 个答案:

答案 0 :(得分:0)

First Of All在A类中携带ListView。单击任何Listview时调用Class B活动的startActivity方法而不调用任何finish()。 我希望你已经在做什么了。 现在在第二个活动中用于调用活动A的按钮(不是后退按钮)。在其clickListener中调用Activity A不要调用startActivity(intentForA)而是调用finish();结束活动B.这将恢复暂停的A活动..

我希望这会有所帮助

答案 1 :(得分:0)

您需要创建3个活动而不是2个。 有一个MAIN活动,并没有真正显示任何内容。

所以你有活动A,它是你可以处理与DB等连接的主要活动。

然后,活动B和C可以是您使用过的A和B.

活动A(主要活动)可以拥有自己的静态实例,因此您可以引用它 变量等 - 或者 - 您可以使用Intent.put等将数据从一个活动传递到另一个活动

我更喜欢全局静态实例方式,因为我是Java上的一个小学校。

编辑: 忘记提及,要处理应用程序的“关闭”,活动B或C也必须关闭活动。

public class ActivityA extends Activity {
    ActivityA act_a_instance;
    public int some_integer = 22;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        act_a_instance = this;//Now you can reference this Activity outside
        //Your creation stuff etc
    }
} 


public class ActivityB extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
              //Your creation stuff etc

              //Reference stuff from ActivityA like so :
              int temp_integer = ActivityA.act_a_instance.some_integer;
        }
       @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.options_back:
                startActivity(new Intent(this, ActivityC.class));
                break;
            }
        }

    @Override
    protected void onStop() {
        finish();
        super.onStop();
    }
}

public class ActivityB extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {

            //Your creation stuff etc
        }
       @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.options_back:
                startActivity(new Intent(this, ActivityB.class));
                break;
            }
        }

    @Override
    protected void onStop() {
        finish();
        super.onStop();
    }
}

答案 2 :(得分:0)

使用以下代码希望这可以解决您的问题

Intent i = new Intent(B.this, A.class); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i);