Android编程。从一个活动传递数组到另一个活动。

3

如何在这两个活动之间传递数组

主活动

package com.Rohit.intentpurchase;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

CheckBox c[] = new CheckBox[4];
int[] price = new int [] {20,50,60,80};
int sum = 0;
int num = 0;
String name;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button b= (Button)findViewById(R.id.button1);
    // Created reference for checkbox
    c[0] = (CheckBox)findViewById(R.id.checkBox1);
    c[1] = (CheckBox)findViewById(R.id.checkBox2);
    c[2] = (CheckBox)findViewById(R.id.checkBox3);
    c[3] = (CheckBox)findViewById(R.id.checkBox4);
    // even handling for button
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
    for(int i = 0; i < c.length; i++) { 
                // on user checked particular box
                if(c[i].isChecked()) {
                    // Get certain box checked
                    name = c[i].getText().toString();
                    // Total of price
                    sum = sum + price[i];
                    // No.of items selected
                    num = num + 1;
                }
            // sending the data to second activity
            Intent in = new Intent(getApplicationContext(), SecondActiviy.class);
            // converted to in.putExtra(String name , string[] value)
            in.putExtra("name", name);
            in.putExtra("Price",sum);
            in.putExtra("Total",num);
            startActivity(in);

    }

        }
    });
}

第二个活动
包 com.Rohit.intentpurchase;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.widget.TextView;

public class SecondActiviy extends Activity {
// created an array for Textbox
TextView t[] = new TextView[6];
int i,num,sum;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second_activiy);
    t[0] = (TextView)findViewById(R.id.textView2);
    t[1] = (TextView)findViewById(R.id.textView3);
    t[2] = (TextView)findViewById(R.id.textView4);
    t[3] = (TextView)findViewById(R.id.textView5);
    t[4] = (TextView)findViewById(R.id.textView6);
    t[5] = (TextView)findViewById(R.id.textView7);

     for(int j = 0; j < t.length; j++) {    
        // Get access to data from 1 activity
         Intent in = getIntent();
        // Get String array name from 1 activity
         String[] name = in.getStringArrayExtra("name");
        // got a problem here
        t[0].setText(name[i]);
    // no problem here 
        int total = in.getIntExtra("Total",num);
        int price = in.getIntExtra("Price",sum);

        t[4].setText(" TOTAL: "+ total);
        t[5].setText(" PRICE: "+ price); 
     }



}
}

Xml 
Files Main activity

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView1"
    android:text="@string/CB1" />

<CheckBox
    android:id="@+id/checkBox2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/checkBox1"
    android:layout_below="@+id/checkBox1"
    android:text="@string/CB2" />

<CheckBox
    android:id="@+id/checkBox3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/checkBox2"
    android:layout_below="@+id/checkBox2"
    android:text="@string/CB3" />

<CheckBox
    android:id="@+id/checkBox4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/checkBox3"
    android:layout_below="@+id/checkBox3"
    android:text="@string/CB4" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/checkBox4"
    android:layout_toRightOf="@+id/checkBox4"
    android:text="@string/Button" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="23dp"
    android:text="@string/Items" />

Second Activity XML
<!--
`<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 tools:context=".SecondActiviy" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="@string/si" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView1"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="16dp"
    android:text="@string/T2" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_below="@+id/textView2"
    android:layout_marginTop="16dp"
    android:text="@string/T3" />

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView3"
    android:layout_below="@+id/textView3"
    android:layout_marginTop="21dp"
    android:text="@string/T4" />

<TextView
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView4"
    android:layout_below="@+id/textView4"
    android:layout_marginTop="22dp"
    android:text="@string/T5" />

<TextView
    android:id="@+id/textView7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/textView6"
    android:layout_marginLeft="20dp"
    android:layout_toRightOf="@+id/textView1"
    android:text="@string/price" />

<TextView
    android:id="@+id/textView6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView5"
    android:layout_below="@+id/textView5"
    android:layout_marginTop="15dp"
    android:text="@string/Items" />

    </RelativeLayout> '`
    --->

这些是名为mainactivity和second activity的xml文件。只是为了展示最终用户我的应用程序的外观。请注意,保留了HTML标签。

4
这里的问题是什么? - EProgrammerNotFound
你在尝试问什么吗? - Parvaz Bhaskar
2
不知道你的文化如何,但在我成长的地方,一个问题总是伴随着另一个问题。 - bofredo
@MatheusFreitas 很好,你只看到了代码,但是我甚至在遇到错误的代码中加入了注释 :). - B.rohit Nare
空指针异常。我猜当我尝试调用t[i].setText(name[i]);时发生了这种情况。 - B.rohit Nare
显示剩余4条评论
5个回答

2

为了通过,在你的MAinactivity中尝试类似以下的方法

Bundle b=new Bundle();
b.putStringArray(key, new String[]{value1, value2});
Intent i=new Intent((getApplicationContext(), SecondActiviy.class);
i.putExtras(b);

同时,在你的SecondActivity中接收数据

Bundle b=this.getIntent().getExtras();
String[] array=b.getStringArray(key);

0

你需要这个吗?

从第一个活动传递:

Bundle b=new Bundle();
b.putStringArray(key, new String[]{value1, value2});
Intent i=new Intent(context, Class);
i.putExtras(b);

从Activity 2中读取:
Bundle b=this.getIntent().getExtras();
String[] array=b.getStringArray(key);

在Activity 1中: List tempArrayList = new ArrayList();

tempArrayList.add(name);
tempArrayList.add(price);
tempArrayList.add(total);

现在

Bundle b=new Bundle();
    b.putStringArray(key, tempArrayList);
    Intent i=new Intent(context, Class);
    i.putExtras(b);

在第二个活动中:

Bundle b=this.getIntent().getExtras();
    String[] array=b.getStringArray("tempArrayList");

嗨,Hussain。根据你的回答,我没有在放置字符串数组时传递任何字符串值。因为我正在尝试在第二个活动中显示第一个活动复选框中选择的项目? - B.rohit Nare
我已经传递了不同的项目。如果您转到第二个活动,当您尝试调用t [i] .setText(name [i])时会出现问题。在那里,我遇到了空指针异常。如果我只是尝试传递t [i] .setText(name),它只会执行最后一个选中的复选框。 - B.rohit Nare
@B.rohitNare:看到你的编辑了,我需要检查一下你的具体情况,然后再回答。 - Hussain Akhtar Wahid 'Ghouri'
我没有传递数组列表,只是传递了数组。你有看过代码吗? - B.rohit Nare
@B.rohitNare:我可以拿你的布局吗? - Hussain Akhtar Wahid 'Ghouri'
太大了,我可以给您发送图片吗? - B.rohit Nare

0
问题如下:
在第一个活动中,您创建了一个包含4个索引的数组:
public class MainActivity extends Activity {

CheckBox c[] = new CheckBox[4]; //HERE!!

下限 c = 0
上限 c = 3;

但是,在第二个活动中,您试图访问4和5索引,因为在第二个活动中,数组的上限是5

public class SecondActiviy extends Activity {
// created an array for Textbox
TextView t[] = new TextView[6];

下限 t = 0
上限 t = 5;

  for(int j = 0; j < t.length; j++) {    
        // Get access to data from 1 activity
         Intent in = getIntent();
        // Get String array name from 1 activity
         String[] name = in.getStringArrayExtra("name");
        // got a problem here
        t[0].setText(name[i]);
        // no problem here 
        int total = in.getIntExtra("Total",num);
        int price = in.getIntExtra("Price",sum);

        t[4].setText(" TOTAL: "+ total);
        t[5].setText(" PRICE: "+ price); 
     }

所以,你不能这样做:

// got a problem here
t[0].setText(name[i]);

因为当 j = 4j = 5 时,它将越过数组 "name" 的最高索引


0

0
在第二个活动中,您没有更改索引i的值,因此它始终初始化为0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接