Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否将复选框数据传递给其他活动?_Java_Android_Android Activity - Fatal编程技术网

Java 是否将复选框数据传递给其他活动?

Java 是否将复选框数据传递给其他活动?,java,android,android-activity,Java,Android,Android Activity,问题是 从五个复选框选择中选择一个选项,并在另一个页面中显示所选选项的结果 我在应用程序中有两个活动 所有的编码都是在java文件上完成的,没有在xml文件中添加任何代码 MainActivity.java import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import an

问题是 从五个复选框选择中选择一个选项,并在另一个页面中显示所选选项的结果

我在应用程序中有两个活动

所有的编码都是在java文件上完成的,没有在xml文件中添加任何代码

MainActivity.java

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.*;
import android.view.View.*;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Q3
                LinearLayout ll3 = new LinearLayout(this);
                ll3.setOrientation(LinearLayout.VERTICAL);


                final List <CheckBox> cbs = new ArrayList<CheckBox>();

                for(int i = 0; i < 5; i++){
                    CheckBox cb = new CheckBox(this);
                    cb.setText("Apple" + (i + 1));
                    ll3.addView(cbs.get(i));
                }



                Button button3 = new Button(this);
                button3.setText("Select");

                button3.setOnClickListener(new OnClickListener(){

                    public void onClick(View v) {
                        StringBuffer str = new StringBuffer();

                        for(int i = 0; i < cbs.size(); i++){
                            if(cbs.get(i).isChecked()){
                                str.append(cbs.get(i).getText().toString() + "; ");
                            }
                        }

                        Intent i = new Intent(MainActivity.this,MainActivity2.class);
                        i.putExtra("checked", str.toString());
                        startActivity(i);
                    }
                });

                ll3.addView(button3);
                setContentView(ll3);
    }



}
当我运行应用程序时,它会显示无法运行的错误消息状态。有什么问题吗

日志文件

02-20 08:09:07.274: D/AndroidRuntime(376): Shutting down VM
02-20 08:09:07.274: W/dalvikvm(376): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-20 08:09:07.303: E/AndroidRuntime(376): FATAL EXCEPTION: main
02-20 08:09:07.303: E/AndroidRuntime(376): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.practical033/com.practical033.MainActivity}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.os.Looper.loop(Looper.java:123)
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.app.ActivityThread.main(ActivityThread.java:3683)
02-20 08:09:07.303: E/AndroidRuntime(376):  at java.lang.reflect.Method.invokeNative(Native Method)
02-20 08:09:07.303: E/AndroidRuntime(376):  at java.lang.reflect.Method.invoke(Method.java:507)
02-20 08:09:07.303: E/AndroidRuntime(376):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-20 08:09:07.303: E/AndroidRuntime(376):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-20 08:09:07.303: E/AndroidRuntime(376):  at dalvik.system.NativeStart.main(Native Method)
02-20 08:09:07.303: E/AndroidRuntime(376): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
02-20 08:09:07.303: E/AndroidRuntime(376):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
02-20 08:09:07.303: E/AndroidRuntime(376):  at java.util.ArrayList.get(ArrayList.java:311)
02-20 08:09:07.303: E/AndroidRuntime(376):  at com.practical033.MainActivity.onCreate(MainActivity.java:32)
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-20 08:09:07.303: E/AndroidRuntime(376):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-20 08:09:07.303: E/AndroidRuntime(376):  ... 11 more
02-20 08:09:09.733: I/Process(376): Sending signal. PID: 376 SIG: 9
你可以用两种方法 -使用静态变量并为该变量指定复选框值,然后访问另一个活动 -使用意图传递来自第一个活动的数据传递值,并在其他活动中接收 额外的样品如下 活动1

  Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String keyIdentifer  = null;
i.putExtra("STRING_I_NEED", strName);
活动2

 String newString;
if (savedInstanceState == null) {
    extras = getIntent().getExtras();
    if(extras == null) {
        newString= null;
    } else {
        newString= extras.getString("STRING_I_NEED");
    }
} else {
    newString= (String) savedInstanceState.getSerializable("STRING_I_NEED");
}

使用任何一种方式都取决于您

您尚未将您的复选框添加到cbs列表中,并且您正在尝试从中访问复选框

尝试使用
cbs.add(cb)将复选框添加到列表中在for循环中

试试这个

final List <CheckBox> cbs = new ArrayList<CheckBox>();

            for(int i = 0; i < 5; i++){
                CheckBox cb = new CheckBox(this);
                cb.setText("Apple" + (i + 1));
                cbs.add(cb);
                ll3.addView(cbs.get(i));
            }
final List cbs=new ArrayList();
对于(int i=0;i<5;i++){
复选框cb=新复选框(此复选框);
cb.setText(“苹果”+(i+1));
cbs.add(cb);
ll3.addView(cbs.get(i));
}

是的,您的代码中有一个错误,您正在使用0初始化ArrayList,并将循环应用到5,这是y,当循环开始时,它试图移动到数组列表中的下一个位置,而该位置不是数组列表的大小,因此它超出了索引,并导致应用程序崩溃初始化列表最终列表cbs=new ArrayList();使用下面的最终列表cbs=new ArrayList(5)更改上述代码;一点运气都没有,仍然有同样的力量在模拟器中关闭
final List <CheckBox> cbs = new ArrayList<CheckBox>();

            for(int i = 0; i < 5; i++){
                CheckBox cb = new CheckBox(this);
                cb.setText("Apple" + (i + 1));
                cbs.add(cb);
                ll3.addView(cbs.get(i));
            }