-1

然后在我的应用程序中有 103 个活动,依次为 SplashActivity -> Menu ---> Q_001 ---> Q_002 ... (...) ..... Q_finish。在每个活动中,我都有一个用于退出应用程序的按钮(如主页按钮),以及一个返回菜单的按钮。现在我希望如果用户杀死该应用程序,并在另一个时间打开它返回到正在使用的活动,

我知道我必须尝试更改 SplashActivity 你正在做的最后一个活动,如果你没有进行任何活动来继续他的工作,这是 SplashActivity 的代码:

package org.somename;



import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle TravisIsAwesome) {
        super.onCreate(TravisIsAwesome);
        setContentView(R.layout.splash);



        Thread logoTimer = new Thread (){


            @Override
            public void run(){
                try{
                    sleep(500);
                    Intent menuIntent = new Intent("org.somename.MENU");
                    startActivity(menuIntent);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                finally{
                    finish();

                }
            }
    };

    logoTimer.start();


    }






    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

一直说我不在乎保存活动菜单,而是保存从“Q_001”开始到结束活动“Q_finish”的所有活动。我尝试使用新的这种方法:我在上一个问题中提出了建议,并且我已经实现了这个代码:

package org.somename;



import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle TravisIsAwesome) {
        super.onCreate(TravisIsAwesome);
        setContentView(R.layout.splash);

         int last_activity = getLastActivityIdFromSharedPreferences();
            if (last_activity == 1)
            {
                this.startActivity(new Intent(this, Q_001.class));
                finish();
            }

            int last_activity2 = getLastActivityIdFromSharedPreferences2();
            if (last_activity2 == 2)
            {
                this.startActivity(new Intent(this, Q_002.class));
                finish();
            }

        Thread logoTimer = new Thread (){


            @Override
            public void run(){
                try{
                    sleep(500);
                    Intent menuIntent = new Intent("org.somename.MENU");
                    startActivity(menuIntent);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                finally{
                    finish();

                }
            }
    };

    logoTimer.start();


    }






    private int getLastActivityIdFromSharedPreferences2() {
        // TODO Auto-generated method stub
        return 2;
    }






    private int getLastActivityIdFromSharedPreferences() {
        // TODO Auto-generated method stub
        return 1;
    }






    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

但它不是 SplahActivity 的一部分,并且不会返回执行的 Activity。直接进入菜单,带有空白页的SplahActivity

预先感谢

4

2 回答 2

0

我同意@2Dee。

第一个想法是,我认为您并没有真正学习当前的 Android 开发。我想大多数人会选择一项用于启动的活动(如果您真的需要一项),另一项用于按住 100 个按钮的活动。这 100 个按钮将保存在一个查看器中。一开始理解起来有点复杂,但在我看来,这是要走的路。视图寻呼机将回收利用,是高效且强大的工具。

但也许你正在做学校练习?

编辑:我看到了 2 种方法,可能有人能找到更好的方法。

  1. 您可以保存在用户所在的内存中。当用户单击退出时,只需将当前问题保存在 SharedPreferences 中并在开始时检索它:sharedPreferences
  2. 您可以使单击退出按钮 jsut 调用 onBackPressed() 并可能覆盖 onBackPressed。如果你这样做,活动将被发送到后台,用户将被发送到主页。如果他回到它,它将在最后一个活动上重新开始。您仍然必须保存它以防用户终止应用程序或 Android 终止应用程序以进行资源管理。

编辑 2:

在 Splash Activity 中,您检索一个整数。在主要活动(拿着问题和按钮的活动)中,您写下问题编号。

这给出了类似的东西:

飞溅活动:

 @Override
protected void onCreate(Bundle state){
   super.onCreate(state);
   . . .

   // Restore preferences
   SharedPreferences settings = getSharedPreferences(LAST_QUESTION, 0);
   int number = settings.getInt("last_question", 1); // default value is to start again
   goToQuestionNumber(number); // you better call this in onResume(). 
}

在 onClik() 启动的退出方法中

 SharedPreferences settings = getSharedPreferences(LAST_QUESTION, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putInt("last_question", currentQuestionNumberThatYouShouldKnow);
于 2013-11-08T13:50:44.747 回答
0

好的,正如我所想,我相信您需要重新考虑您的应用程序的架构:)

制作一个活动和一个片段。Activity 将负责在视图中切换 Fragment 并创建它们。它还将包含对 webview 所需的 url 的引用。

这是我会这样做的方式(但它可能需要对你的代码进行完全重构——如果你考虑一下,这不是一个糟糕的练习):

在活动中:

// declare your urls in the res/values/strings.xml and use them here.
private int[] webViewsUrls = {R.string.url1, R.string.url2, ...}; 

在 Activity 的 onCreate 中:

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
int activityIndex = prefs.getInt("lastActivityIndex", 0);
QuestionFragment fragment = new QuestionFragment();
Bundle bundle = new Bundle();
bundle.putInt("INDEX", activityIndex);
bundle.putString("WEBVIEW_URL", webViewsUrls[activityIndex]);
fragment.setArguments(bundle);
// Show fragment

要将新片段添加到 Activity 布局内的 ViewGroup (如果您不使用 ViewPager 而是使用按钮来更改视图中的问题):

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
// create you fragment using the method I give above
fragmentTransaction.add(R.id.fragment_container_in_activity_layout, fragment, STRING_FRAGMENT_TAG);
fragmentTransaction.commit();

要替换已在视图中的片段,请使用replace方法而不是 add。

单击按钮或在 ViewPager 中,更改视图中的 Fragment,并且在启动 Fragment 时不要忘记在 SharedPreferences 中保存 activityIndex 的新值。

我相信@Poutrathor 的建议非常好,如果你想使用 ViewPager,你可以参考我昨天给出的这个答案,我认为它比拥有 100 多个活动更符合你的要求。

于 2013-11-08T14:37:19.647 回答