我有一个联系人列表视图,每个联系人都是一个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方法不对应,这就是为什么它不执行并将我带到另一个屏幕。
答案 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");
准备好享受代码。 快乐的编码....