[英]How to do operations in ListView items and to pass that data to next activity in android?
[英]Android - How to make an Activity for each item in a ListView and pass Java Object to next screen
我有一个联系人的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方法之类的东西,这就是为什么它不执行并将我带到另一个屏幕的原因。
Intent intent = new Intent(ActivityA.this, DetailView.class);
intent.putExtra("extra_name","extra");
startActivity(intent);
然后在另一个活动中:
/*onCreate*/
Object extra = getIntent().getExtra().get("extra_name");
我建议传递某种指向描述的ID,不建议传递带有意图的复杂数据结构
只需使用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");
}
有关更多信息,请参见此简短示例 。
如果要传递整数,则可以按照以下步骤进行操作: myIntent.putExtra("value", i);
并接受: int myValue = extras.getInt("value");
。
希望能有所帮助。
尝试这样的事情:
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);
}
创建具有可打包的Java对象
检查以下代码以在Android中创建可拆分对象。
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);
这是完整的描述。
要检索其他活动中的对象,您必须编写以下代码。
ObjFeedImages objectOnOtherActivity = (ObjFeedImages)getIntent().getParcelableExtra("key_name");
所以准备享受代码。 祝您编程愉快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.