2011-03-25 94 views
1

我需要传递一个ArrayList到一个活动,所以我可以列出它,但我不想开始那个活动,那么。我需要在另一个“显示扫描列表”按钮的按钮上开始列表输出活动。导致这个按钮,我想把包通过只包含一个完成(),我用它回到我的主菜单,当我有我的列表准备好,并从该菜单我去显示列表button.Which启动另一个活动,我知道如何通过一个捆绑的唯一方法是一个意图。但那会再次启动菜单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

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

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

+0

我不知道你可以发送一个'意图'以及。真棒! – 2011-03-25 15:33:44

+0

另外,+1了解提问者。我没有。 – 2011-03-25 15:34:52

+0

你说得对,但我忘了告诉别的,现在有一个A活动,它调用B活动,这是条形码扫描器,调用C活动,在那里我可以看到扫描的代码,我可以推送下一个或结束按钮,此C活动正在处理数组列表,现在当我按完成时,我会返回到A活动,并且在列表中显示我想要在D活动中看到的扫描列表。有没有什么感觉? – 2011-03-25 17:02:50

0

您需要重新考虑您的方法。你将无法在没有通过onCreate()的Activity中与ArrayList“工作”。这听起来像你需要另一个可以处理你的ArrayList的活动或类。

+0

啊是啊,我想过,所以当我打电话给我的活动arraylist是再次创建,并将是空的? – 2011-03-25 17:05:07

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方法读取数据。