Android 通过ArrayList<;字符串>;标签之间

Android 通过ArrayList<;字符串>;标签之间,android,android-2.2-froyo,Android,Android 2.2 Froyo,我不太清楚Intent对象以及如何使用它在活动之间传递数据。在我的应用程序中,我有几个选项卡,我想在它们之间传递ArrayList。下面是我计划使用的示例代码,但我缺少了主活动捕获意图并在开始时将其传递给新活动的部分: 1.myTabs.java==>这就是我认为需要添加一些代码来在TabOne和TabTwo之间传递数据的地方。目前,它只是使用TabActivity示例的示例代码 public class myTabs extends TabActivity { /** Called w

我不太清楚Intent对象以及如何使用它在活动之间传递数据。在我的应用程序中,我有几个选项卡,我想在它们之间传递ArrayList。下面是我计划使用的示例代码,但我缺少了主活动捕获意图并在开始时将其传递给新活动的部分:

1.myTabs.java==>这就是我认为需要添加一些代码来在TabOne和TabTwo之间传递数据的地方。目前,它只是使用TabActivity示例的示例代码

public class myTabs extends TabActivity {
    /** Called when the activity is first created. */
    @Override

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Reusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        // Create an Intent to launch an Activity for the tab (to be reused)
        intent = new Intent().setClass(this, TabPeopleActivity.class);
        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("TabOne").setIndicator("TabOne",
                          res.getDrawable(R.drawable.ic_tab_one))
                      .setContent(intent);
        tabHost.addTab(spec);

        // Do the same for the other tabs
        intent = new Intent().setClass(this, TabTransactionActivity.class);
        spec = tabHost.newTabSpec("TabTwo").setIndicator("TabTwo",
                          res.getDrawable(R.drawable.ic_tab_two))
                      .setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);
    }
}
2.TabOne.java==>我在onStop过程中添加了一段代码,用我想传递给TabTwo的数组填充Intent数据。但我不确定这样做是否正确

public class TabOne extends Activity {

    [...]
    private ArrayList<String> arrayPeople;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tabone);
        arrayPeople = new ArrayList<String>();

    [... here we modify arrayPeople ...]

    }

    /** Called when the activity looses focus **/
    @Override
    public void onStop(){
        Intent myIntent = new Intent();
        myIntent.putStringArrayListExtra("arrayPeople", arrayPeople);
        this.setIntent(myIntent);
    }
}

让我知道如何做到这一点:)

我不认为在onStop()中更改意图会起作用,因为TabHost处理意图。用这个设置一个类的意图。setIntent()不会让另一个类用getIntent()访问它,因为它们是基于不同的意图构建的


我要么将ArrayOple存储在数据库中,要么使用MyTabs.setArrayOple或类似的东西将ArrayOple传递回TabHost。然后,您可以在创建下一个选项卡时查询数据库,或者直接从MyTabs类中提取数据库。

在MyTabs对象中设置静态字段有什么意义

    public class myTabs extends TabActivity {
....
public static arrayPeople = new ArrayList<String>();
....
在TabTwo.java上:

arrayPeople =  myTabs.arrayPeople

有意义吗?

在上面的例子中,当我替换“onStop”=“onPause”时,它真的很有效


它看起来简单而有趣,但当我尝试查看内容时,它给了我一个“(挂起(异常RuntimeException))”。我只得到[PRINT]:System.out.println(“arrayPeople[PRINT]”;System.out.println(“ArrayOple 1=[”+ArrayOple.get(0)+“]);System.out.println(“ArrayOple[PRINT OK]”;我做错什么了吗?你应该把你的代码贴出来。编辑您的问题并添加新的代码:)好的,请参阅我在完整的下载工作区中添加的详细信息使用数据库对于这个简单的事情来说似乎太高级了。当你的意思是使用“MyTabs.SetArrayOple”时,这是一个类似于上面建议的解决方案吗?是的,使用静态ArrayList将是最好的。
    public class myTabs extends TabActivity {
....
public static arrayPeople = new ArrayList<String>();
....
 @Override
    public void onStop(){
       myTabs.arrayPeople = arrayPeople;
    }
arrayPeople =  myTabs.arrayPeople
/** Called when the activity looses focus **/
@Override public void onStop()
{
    Intent myIntent = new Intent();
    myIntent.putStringArrayListExtra("arrayPeople", arrayPeople);
    this.setIntent(myIntent);
}

/** Called when the activity looses focus **/
@Override public void onPause()
{
    Intent myIntent = new Intent();
    myIntent.putStringArrayListExtra("arrayPeople", arrayPeople);
    this.setIntent(myIntent);
}