无需启动活动即可传递包

时间:2011-03-25 15:19:58

标签: android arraylist bundle

我需要将一个ArrayList传递给一个活动,所以我可以在那里列出它,但我不想在那时开始那个活动。我需要在另一个“显示扫描列表”按钮按钮上启动列表活动。因为我想把捆绑传递的按钮只包含一个finish(),当我准备好我的列表时,我用它回到我的主菜单,然后从那个菜单我进入显示列表按钮。哪个开始另一个活动,我知道如何传递一个包的唯一方法是一个意图。但那会再次启动菜单Activity。我希望有人能理解这个问题,我可能需要一些帮助。

先谢谢你。

- 编辑 -

package org.example.sudoku;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ListActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Intent;



public class Sudoku extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

     // Set up click listeners for all the buttons

        View exitButton = findViewById(R.id.exit_button);
        exitButton.setOnClickListener(this);
        View scanButton = findViewById(R.id.scan_button);
        scanButton.setOnClickListener(this);
        View editButton = findViewById(R.id.about_button);
        editButton.setOnClickListener(this);

    }
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.scan_button:
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "ONE_D_MODE");
            startActivityForResult(intent, 0);
        break;
        case R.id.about_button:
            ArrayList<String> scanList = new ArrayList<String>();
            scanList.add("asd");
            scanList.add("asd2");
            scanList.add("asd3");
            //String[] names = new String[] { "Linux", "Windows7", "Eclipse", "Suse", "Ubuntu", "Solaris", "Android", "iPhone"};
            Intent about = new Intent(this.getApplicationContext(),About.class);
            Bundle b = new Bundle();

            b.putStringArrayList("key", scanList);


            about.putExtras(b);
            startActivityForResult(about, 0);
        break;
        case R.id.exit_button:
            finish();
        break;


                    }
                }



    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 0) {
            if (resultCode == RESULT_OK) {
                String contents = intent.getStringExtra("SCAN_RESULT");
                // Handle successful scan
                Intent result = new Intent(this.getApplicationContext(),Result.class);
                Bundle b = new Bundle();
                b.putString("content",contents);
                result.putExtras(b);
                startActivityForResult(result, 0);



            } else if (resultCode == RESULT_CANCELED) {
                // Handle cancel
            }
        }
    }

}
这是我的主要活动。我不知道我是否理解正确,但我只需要另一个公共空白onActivityResult(int requestCode,int resultCode,Intent intent)将处理完成的C活动,这是由B活动调用的?并且A会知道这是标识符的B活动原因吗? 我希望我明白了。

3 个答案:

答案 0 :(得分:3)

所以,如果我理解了这个问题,你会遇到以下情况。您有活动A,您已从其中启动活动B(在其中生成所需的ArrayList),然后您完成()活动B,并从活动A开始,您希望使用生成的列表启动活动C. 如果这是您的方案,最好的方法是使用活动结果。在活动B中调用http://developer.android.com/reference/android/app/Activity.html#setResult(int,android.content.Intent),它接受bundle并将ArrayList传递回Activity A.然后当你启动Activity C时,传递它。

您必须通过调用http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent,int)启动活动B并在onActivityResult()中处理结果

答案 1 :(得分:0)

您需要重新考虑您的方法。您无法通过onCreate()在“活动”中“使用”ArrayList“工作”;听起来你需要另一个可以处理你的ArrayList的活动或类。

答案 2 :(得分:0)

执行此操作的正确方法似乎是将您的列表作为FLAG_ACTIVITY_CLEAR_TOP意图中的额外内容传递:

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("list", myList);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

当用户按下按钮时会发生这种情况。 FLAG_ACTIVITY_CLEAR_TOP将完成MainActivity之上的所有活动,因此您无需担心调用finish()。它还会重新启动MainActivity,您可以使用onCreate方法重新读取数据。