提取 Android 应用适配器中两个 Activity 之间发送的信息
Extract info sent between two Activities in adapter for Android app
我的第一个 Activity 在网格中显示图像并在每个图像上实现 onclick 方法,它将发送信息并在单击时打开第二个 activity。
我想构建一个图像适配器来在第二个 activity 中处理该图像。我如何提取图像适配器中被点击图像的图像 ID,以告诉适配器我希望它与在第一个 activity 中被点击的图像一起工作?
开始的代码 FullSize
Activity:
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
Intent puzzle = new Intent(this, FullSize.class);
puzzle.putExtra("selected_img", id);
startActivity(puzzle);
}
您可以使用 Extras 在活动之间传递数据
Intent intent = new Intent(getBaseContext(), SecondActivity.class);
intent.putExtra("imgId", id);
startActivity(intent);
然后在第二个取回activity:
Intent intent = getIntent();
int imgId = intent.getIntExtra("imgId");
如何处理 ID 由您决定。
如之前的回答所述,您可以使用 putExtra
或者您可以使用 setData
。如果您要处理应用资源之外的图像,则必须处理 Uri
s。在这种情况下,使用
Intent intent = new Intent(getBaseContext(), SecondActivity.class);
intent.setData(uri);
startActivity(intent);
第二个activity可以用
Intent intent = getIntent();
Uri uri = intent.getData ();
Uri
对象可用于读取图像文件或有关图像的元数据。 Uri 也可以是远程文件。
您可以将图像 ID 传递给自定义适配器的构造函数。
首先,确保您发送的是图像资源 ID。目前看起来您正在额外发送行 ID。
当你调用puzzle.putExtra("selected_img", id);
时,id
实际上是AdapterView
的行ID。 See documentation here
你需要传递的其实是imageList.get(position)
获取当前选中项的Image Resource ID。
一旦你开始工作,你可以做这样的事情:
传入您的图像 ID:
Intent i = getIntent();
int imageID = i.getIntExtra("selected_img", 0);
ImageAdapter ia = new ImageAdapter(this, imageID);
自定义适配器,在构造函数中将图像 ID 作为参数:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
int imageID;
public ImageAdapter(Context c, int imageResourceID) {
mContext = c;
imageID = imageResourceID;
}
public int getCount() {
return 1;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(imageID); //use the image id passed in through the constructor
return imageView;
}
}
我的第一个 Activity 在网格中显示图像并在每个图像上实现 onclick 方法,它将发送信息并在单击时打开第二个 activity。
我想构建一个图像适配器来在第二个 activity 中处理该图像。我如何提取图像适配器中被点击图像的图像 ID,以告诉适配器我希望它与在第一个 activity 中被点击的图像一起工作?
开始的代码 FullSize
Activity:
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
Intent puzzle = new Intent(this, FullSize.class);
puzzle.putExtra("selected_img", id);
startActivity(puzzle);
}
您可以使用 Extras 在活动之间传递数据
Intent intent = new Intent(getBaseContext(), SecondActivity.class);
intent.putExtra("imgId", id);
startActivity(intent);
然后在第二个取回activity:
Intent intent = getIntent();
int imgId = intent.getIntExtra("imgId");
如何处理 ID 由您决定。
如之前的回答所述,您可以使用 putExtra
或者您可以使用 setData
。如果您要处理应用资源之外的图像,则必须处理 Uri
s。在这种情况下,使用
Intent intent = new Intent(getBaseContext(), SecondActivity.class);
intent.setData(uri);
startActivity(intent);
第二个activity可以用
Intent intent = getIntent();
Uri uri = intent.getData ();
Uri
对象可用于读取图像文件或有关图像的元数据。 Uri 也可以是远程文件。
您可以将图像 ID 传递给自定义适配器的构造函数。
首先,确保您发送的是图像资源 ID。目前看起来您正在额外发送行 ID。
当你调用puzzle.putExtra("selected_img", id);
时,id
实际上是AdapterView
的行ID。 See documentation here
你需要传递的其实是imageList.get(position)
获取当前选中项的Image Resource ID。
一旦你开始工作,你可以做这样的事情:
传入您的图像 ID:
Intent i = getIntent();
int imageID = i.getIntExtra("selected_img", 0);
ImageAdapter ia = new ImageAdapter(this, imageID);
自定义适配器,在构造函数中将图像 ID 作为参数:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
int imageID;
public ImageAdapter(Context c, int imageResourceID) {
mContext = c;
imageID = imageResourceID;
}
public int getCount() {
return 1;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(imageID); //use the image id passed in through the constructor
return imageView;
}
}