我是一名新手程序员,我正在尝试使用Eclipse学习Android编码。 这是我第一次使用StackOverflow。
仅出于教学目的,我想制作一个简单的动物百科全书。
所以在我的家庭课上,有一些按钮:“狗”,“猫”,“鸟”等。当我点击按钮时,它会带我进入相同的布局但是当然有不同的内容。
所以我创建了一个名为AnimalData的类来保存
ArrayList<Integer>
存储R.drawable.xxx
和ArrayList<String>
存储我将放在图片下方的文本(如“斗牛犬”)
或“赫斯基”)
然后我创建了一个名为ChangeContent的类来设置所有可绘制的类 和文本到XML
但每当我点击该按钮时,都会导致意外停止错误
以下是缩短的Home类,“崩溃制造者”不在这里。我使用Thread.sleep(2000)
检查了每行的整个代码行,因此如果我的应用程序在2秒之前崩溃,则错误发生在sleep()代码之前,反之亦然。
public class Home extends Activity implements OnClickListener{
Button dog, cat, bird;
AnimalData ad;
ChangeContent cc;
private ArrayList<Integer> drawable;
private ArrayList<String> title;
public Home(){
ad = new AnimalData();
cc = new ChangeContent(ad);
drawable = new ArrayList<Integer>();
title = new ArrayList<String>()
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
//set the findViewById for all the buttons
//set onClickListener() to all the buttons
}
public void onClick(View v) {
switch (v.getId()){
case R.id.bDog:
drawable.add(R.drawable.xxx);
drawable.add(R.drawable.yyy);
title.add("Bulldog");
title.add("Husky");
break;
case R.id.Cat:
//same
break;
case R.id.bBird:
//same
break;
}
ad.setDrawable(drawable);
ad.setTitle(title);
Intent i = new Intent("animal.ChangeContent"); //from Manifest
startActivity(i);
}
}
AnimalData只是一个典型的getter setter,所以我只是跳过代码
错误就在ChangeContent启动后,因为即使我把sleep()放在构造函数的第一行,它也没有任何效果。
public class ChangeContent extends Activity {
TextView title1, title2;
ImageView pic1, pic2;
private ArrayList<Integer> drawable;
private ArrayList<String> title;
public ChangeContent(AnimalData data){
drawable = new ArrayList<Integer>();
title = new ArrayList<String>();
drawable = data.getDrawable();
title = data.getTitle();
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.animal_info);
//findViewById for the TextView and ImageView
//setText() for TextView and setImageResource() for ImageView
}
}
很抱歉这个问题很长,我试着让它尽可能短 你能帮我解决一下这个错误吗? 先谢谢
答案 0 :(得分:1)
你试图从意图中获取arraylist,而你没有使用putStringArrayList和putIntegerArrayList方法。
putIntegerArrayListExtra(String name, ArrayList<Integer> value)
putStringArrayListExtra(String name, ArrayList<String> value)
所以将呼叫活动改为以下:
Intent i = new Intent(Home.this, ChangeContent.class); //from Manifest
i.putIntegerArrayListExtra("drawables", drawable);
i.putStringArrayListExtra("titles", titles);
startActivity(i);
通过以下方法从onCreate方法获取意图数据: getIntegerArrayListExtra和getStringArrayListExtra
您还可以通过将contentChanged方法设置为静态来执行以下操作,这样您就不需要对应用程序代码进行太多更改,只需执行以下操作:
public class ChangeContent extends Activity {
TextView title1, title2;
ImageView pic1, pic2;
private static ArrayList<Integer> drawable;
private static ArrayList<String> title;
public static ChangeContent(AnimalData data){
drawable = new ArrayList<Integer>();
title = new ArrayList<String>();
drawable = data.getDrawable();
title = data.getTitle();
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.animal_info);
//findViewById for the TextView and ImageView
//setText() for TextView and setImageResource() for ImageView
}
}
答案 1 :(得分:1)
请参阅RajaReddy P的答案:
https://stackoverflow.com/a/9937854
在发送类中使用:
Intent intent = new Intent(PhotoActivity.this,PhotoActivity1.class );
intent.putIntegerArrayListExtra("VALUES", image);
startActivity(cameraIntent);
..并且在接收器类中使用:
Intent i = getIntent();
ArrayList<Integer> img = i.getIntegerArrayListExtra("VALUES");
答案 2 :(得分:0)
你的做法是错误的 -
public Home(){
ad = new AnimalData();
cc = new ChangeContent(ad);
drawable = new ArrayList<Integer>();
title = new ArrayList<String>()
}
ChangeContent是一个Activity类,所以你不要传递这样的参数。
Passsing类应该是可序列化的并使用它 -
startActivity(new Intent(this, ChangeContent.class)
.putExtra("key", ad);
在ChangeContent类中,从Intent中提取类
因此,改变您的代码设计并继续。 祝你好运。