2

Intent オブジェクトと、それを使用してアクティビティ間でデータを渡す方法についてはよくわかりません。私のアプリケーションには、ArrayList を渡したいタブがいくつかあります。使用する予定のサンプル コードを次に示しますが、メイン アクティビティが Intent をキャッチし、それを start で新しいアクティビティに渡す部分がありません。

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);
    }
}

3. TabTwo.java ==> ここでは、Activity の開始時に渡されるはずの Intent から ArrayList を取得しようとしています。しかし、これを行う方法は?

public class TabTwo extends Activity {

    private ArrayList<String> arrayPeople;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.transaction);

        Intent myIntent = new Intent();
        myIntent = this.getIntent();
        arrayPeople = myIntent.getStringArrayListExtra("arrayPeople");
    }
}

あなたのアイデアをありがとう!

編集 :

簡単に説明すると、プロジェクトの完全なワークスペースは次のとおりです。

http://www.lecompteestbon.com/Android.LCEB.zip

私がやりたいのは、ウェブサイト lecompteestbon のオフライン バージョンです。これにより、人々は週末の後に友人間で会計を行うことができます。

TabPeople = Add the list of friends
TabTransactions = List of expenses
TabTransaction = Add an expense
TabResult = Calculate the list of payments

これを機能させる方法を教えてください:)

4

3 に答える 3

2

myTabs オブジェクトに静的フィールドを設定するとはどういうことですか?

    public class myTabs extends TabActivity {
....
public static arrayPeople = new ArrayList<String>();
....

TabOne.java:

 @Override
    public void onStop(){
       myTabs.arrayPeople = arrayPeople;
    }

TabTwo.java:

arrayPeople =  myTabs.arrayPeople

理にかなっていますか?

于 2010-06-05T11:50:54.647 に答える
2

上記の例では、「onStop」=「onPause」を置き換えると本当にうまくいきました

/** 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);
}
于 2011-04-17T15:35:34.180 に答える
0

TabHostがインテントを処理するため、onStop()でインテントを変更しても機能しないと思います。this.setIntent()を使用して1つのクラスのインテントを設定すると、別のクラスが異なるインテントに基づいて構築されているため、getIntent()を使用してそのクラスにアクセスできなくなります。

arrayPeopleをデータベースに保存するか、MyTabs.setArrayPeopleなどを使用してarrayPeopleをTabHostに戻します。次に、次のタブのdb onCreateをクエリするか、MyTabsクラスからプルします。

于 2010-06-05T10:21:09.553 に答える