2

我是一名新手程序员,我正在尝试使用 Eclipse 学习 Android 编码。这是我第一次使用 StackOverflow。

仅出于教程目的,我想做一个简单的动物百科全书。

所以在我的 Home 类中,有一些按钮:“Dog”、“Cat”、“Bird”等。当我单击按钮时,它会将我带到相同的布局,但当然会有不同的内容。

  • 所以我创建了一个名为 AnimalData 的类,它包含 ArrayList<Integer>要存储R.drawable.xxxArrayList<String> 存储我将放在图片下方的文本(如“Bulldog”或“Husky”)

  • 然后我创建了一个名为 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
}
}

对不起,这个问题很长,我尽量让它尽可能短,你们能帮我找出错误吗?之前谢谢

4

3 回答 3

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
}
}
于 2012-04-07T06:21:10.373 回答
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");
于 2012-06-15T14:19:06.290 回答
0

你的方法是错误的-

public Home(){
ad = new AnimalData();
cc = new ChangeContent(ad);
drawable = new ArrayList<Integer>();
title = new ArrayList<String>()

}

ChangeContent 是一个 Activity 类,所以你不要像这样传递参数。

传递类应该是可序列化的并使用它 -

startActivity(new Intent(this, ChangeContent.class)
             .putExtra("key", ad);

并在您的 ChangeContent 类中从 Intent 中提取类

因此,更改您的代码设计并继续。祝你好运。

于 2012-04-07T06:25:27.813 回答