Android - 如何为ListView中的每个项目创建一个Activity并将Java Object传递到下一个屏幕

时间:2014-03-06 19:33:52

标签: java android listview

我有一个联系人列表视图,每个联系人都是一个Java对象,其中包含大量与之关联的信息。其中一些信息显示在ListView中,但其余信息用于DetailView。我正在尝试编写一个方法,将我带到DetailView,查看我点击的任何联系人,但我也需要随身携带该对象。我将所有联系人存储在MainActivity.java

中的ArrayList中

我的问题:我是否需要随身携带联系人对象,或者实际上是否有某种方法可以在另一个Activity中访问我的ArrayList? 如果我可以/必须随身携带它,我将如何这样做,因为putExtra()方法不会将对象作为参数。

我的MainActivity的开头是这样的:

public class MainActivity extends Activity implements AdapterView.OnItemClickListener {

ListView list;

我现在有一个非常基本的onClickListener,但不知道该放入什么内容:

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    Intent intent = new Intent(MainActivity.this, DetailView.class);
    intent.putExtra("contact", i);
    startActivity(intent);
}  

我觉得我对MainActivity类的初始定义与onItemClick方法不对应,这就是为什么它不执行并将我带到另一个屏幕。

4 个答案:

答案 0 :(得分:4)

Intent intent = new Intent(ActivityA.this, DetailView.class);
intent.putExtra("extra_name","extra");
startActivity(intent);

然后在另一个活动中:

/*onCreate*/
Object extra = getIntent().getExtra().get("extra_name");

我建议传递指向描述的某种ID,不推荐使用意图传递复杂的数据结构

答案 1 :(得分:3)

只需使用Intent.putExtra()传递信息,然后使用getIntent().getExtras()接收信息。

// call a new intent
myIntent = new Intent(ActivityA.this, ActivityB.class);  
// put an extra (like this following string)  
String userid = "User A";
myIntent.putExtra("TAG_CONTACT_ID", userid);  
startActivity(myIntent);

// receive the info in your onCreate method in ActivityB
Bundle extras = getIntent().getExtras();
if(extras != null) {
    String newUserID = extras.getString("TAG_CONTACT_ID");
}

有关详细信息,请参阅this short example

如果要传递整数,可以按以下方式执行:myIntent.putExtra("value", i);并将其与int myValue = extras.getInt("value");一起使用。

希望得到这个帮助。

答案 2 :(得分:0)

尝试这样的事情:

public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {

    Contact c = (Contact)contacts.get(position);
    Intent i = new Intent();

    i.putExtras("contact", c);
    i.setClass(this, Activity2.class);
    startActivity(i);
}

答案 3 :(得分:0)

使用parcelable创建java对象

检查以下代码,在Android中创建parcelable对象。

public class ObjFeedImages implements Parcelable {

    public int image_id;
    public boolean like_status = false;
    public String image_url = null;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeStringArray(new String[] {
                String.valueOf(image_id),
                String.valueOf(like_status),
                image_url, });

    }

    public ObjFeedImages(Parcel in) {

        String[] data = new String[3];
        int i = 0;
        in.readStringArray(data);

        image_id = Integer.parseInt(data[i++]);//
        like_status = Boolean.parseBoolean(data[i++]);
        image_url = data[i++];

    }

    public static final Parcelable.Creator<ObjFeedImages> CREATOR = new Parcelable.Creator<ObjFeedImages>() {
        @Override
        public ObjFeedImages createFromParcel(Parcel source) {
            try {
                return new ObjFeedImages(source);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

        @Override
        public ObjFeedImages[] newArray(int size) {
            try {
                return new ObjFeedImages[size];
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    };

}

创建一些此类对象的列表后说

ObjFeedImages object = new ObjFeedImages();
object.image_id = 1;
object.like_status = true;
object.image_url="http://some image url";



Intent intent = new Intent(/*Your Intent Info*/);
intent.putExtras("key_name",object);
startActivity(intent);

Here是完整的说明。

要在其他活动中检索对象,您必须在代码下面编写。

ObjFeedImages objectOnOtherActivity = (ObjFeedImages)getIntent().getParcelableExtra("key_name");

准备好享受代码。 快乐的编码....