繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM