Android 向下一个活动传递多个数据的自定义列表视图
我已经完成了自定义列表视图 每行有6个文本视图和1个图像视图 我所做的是,当按下这个项目时,它就进入了我的第二个活动 但它想要的是将行中的项传递给第二个活动 我不知道如何做,也不知道在列表或适配器中添加到哪里 第二个活动中要做什么 这是我的第一个活动Android 向下一个活动传递多个数据的自定义列表视图,android,listview,Android,Listview,我已经完成了自定义列表视图 每行有6个文本视图和1个图像视图 我所做的是,当按下这个项目时,它就进入了我的第二个活动 但它想要的是将行中的项传递给第二个活动 我不知道如何做,也不知道在列表或适配器中添加到哪里 第二个活动中要做什么 这是我的第一个活动 public class ImageListActivity extends AppCompatActivity { private DatabaseReference mDatabaseRef; private List<ImageUpl
public class ImageListActivity extends AppCompatActivity {
private DatabaseReference mDatabaseRef;
private List<ImageUpload> imgList;
private ListView lv;
private ImageListAdapter adapter;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_list);
imgList = new ArrayList<>();
lv = (ListView) findViewById(R.id.listViewImage);
//Show progress dialog during list image loading
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Please wait loading list image...");
progressDialog.show();
mDatabaseRef = FirebaseDatabase.getInstance().getReference(ListActivity.FB_Database_Path);
mDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
progressDialog.dismiss();
//Fetch image data from firebase database
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
//ImageUpload class require default constructor
ImageUpload img = snapshot.getValue(ImageUpload.class);
imgList.add(img);
}
//Init adapter
adapter = new ImageListAdapter(ImageListActivity.this, R.layout.image_item, imgList);
//Set adapter for listview
lv.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
progressDialog.dismiss();
}
});
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent myintent = new Intent(view.getContext(), Buy1Activity.class);
startActivityForResult(myintent, 0);
}
});
}
}
这是适配器
public class ImageListAdapter extends ArrayAdapter<ImageUpload> {
private Activity context;
private int resource;
private List<ImageUpload> listImage;
public ImageListAdapter(@NonNull Activity context, @LayoutRes int resource, @NonNull List<ImageUpload> objects) {
super(context, resource, objects);
this.context = context;
this.resource = resource;
listImage = objects;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View v = inflater.inflate(resource, null);
TextView tvName = (TextView) v.findViewById(R.id.tvImageName);
TextView tvModel = (TextView) v.findViewById(R.id.tvImageModel);
TextView tvBrand = (TextView) v.findViewById(R.id.tvImageBrand);
TextView tvPrice = (TextView) v.findViewById(R.id.tvImagePrice);
TextView tvyear = (TextView) v.findViewById(R.id.tvImageYear);
TextView tvDesc = (TextView) v.findViewById(R.id.tvImageDesc);
ImageView img = (ImageView) v.findViewById(R.id.imgView);
tvModel.setText(listImage.get(position).getModel());
tvName.setText(listImage.get(position).getName());
tvBrand.setText(listImage.get(position).getBrand());
tvyear.setText(listImage.get(position).getYear());
tvDesc.setText(listImage.get(position).getDesc());
tvPrice.setText(listImage.get(position).getPrice());
Glide.with(context).load(listImage.get(position).getUrl()).into(img);
return v;
}
}
试试这个
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ImageUpload img = adapter.get(position);
Intent myintent = new Intent(view.getContext(), Buy1Activity.class);
myintent.putParcelableArrayListExtra("parcel_data", img);
startActivityForResult(myintent, 0);
}
});
希望能有帮助 据我所知,您希望传输您单击的列表项的整个对象,即ImageUpload。为此,您可以将ImageUpload模型类创建为Parcelable,然后在您的intent中传递选定的ImageUpload对象,并使用getParcelable从intent中检索它 在列表项上单击:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent myintent = new Intent(view.getContext(), Buy1Activity.class);
myintent.putExtra("selected_image_upload", ((ImageUpload) adapter.getItem(position)));
startActivityForResult(myintent, 0);
}
});
您可以从中获得创建类Parcelable的提示 可能是重复的我看到了这个和超过25页的类似主题,都试过了,但我做不到,我不是专家,我只是一个初学者,你可以做链接中提到的每个项目,或者你冷创建一个对象,并通过意图传递它。阅读更多关于如何操作的教程,如:,同时提及您在尝试时遇到的问题,这将帮助我们更好地帮助您。感谢您的帮助,在第二个活动中获取文本视图效果很好,但我无法获取图像抱歉延迟,我相信ImageUpload类具有保存URL的属性。使用getParcelable从intent检索ImageUpload对象后,可以使用getter方法获取图像URL表单对象。并从该url加载图像。
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent myintent = new Intent(view.getContext(), Buy1Activity.class);
myintent.putExtra("selected_image_upload", ((ImageUpload) adapter.getItem(position)));
startActivityForResult(myintent, 0);
}
});
ImageUpload imgUploadObj = getIntent().getExtras().getParcelable("selected_image_upload");