【问题标题】:Extract info sent between two Activities in adapter for Android app提取 Android 应用适配器中两个活动之间发送的信息
【发布时间】:2015-04-20 21:27:38
【问题描述】:

我的第一个 Activity 在网格中显示图像并在每个图像上实现 onclick 方法,该方法将在单击时发送信息并打开第二个 Activity。

我想构建一个图像适配器来在第二个活动中操作该图像。如何在图像适配器中提取单击图像的图像 ID,以告诉适配器我希望它与在第一个活动中单击的图像一起使用?

FullSizeActivity 开头的代码:

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);
}

【问题讨论】:

  • 通过onItemClick的方式,INTENT携带点击图片的ID,存在于drawable res文件夹中。 public void onItemClick(AdapterView> parent, View v, int position, long id){ Intent puzzle = new Intent(this, FullSize.class); puzzle.putExtra("selected_img", id);开始活动(拼图);
  • 所以您的图像适配器中只有一张图像?
  • 是的。我将使用该适配器创建图像部分的位图数组,以相反的顺序显示到第二个活动的网格视图上。
  • 或者也许有更好的方法...
  • 看起来您实际上是在发送第一个活动的行 ID,而不是图像 ID。请参阅文档:developer.android.com/reference/android/widget/…您是否有第一个活动中的图像资源 ID 列表?

标签: java android class android-intent


【解决方案1】:

您可以将图像 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;
        }
    }

【讨论】:

  • 我理解并感谢您的帮助,但我对“imageList.get(position)”语句中的“imageList”指的是什么感到有些困惑。请告诉我。
  • 这将是一个 ArrayList,其中包含第一个 Activity 中的图像资源 ID。基本上,在通过 Intent 发送之前,您需要一些方法来获取图像资源 Id。
【解决方案2】:

您可以使用 Extras 在活动之间传递数据

Intent intent = new Intent(getBaseContext(), SecondActivity.class);
intent.putExtra("imgId", id);
startActivity(intent);

然后在第二个活动中取回它:

Intent intent = getIntent();
int imgId = intent.getIntExtra("imgId");

如何处理 id 取决于您。

【讨论】:

  • 感谢回复。我实际上已经完成了所有这些,但我现在想用 ADAPTER 访问那个“imgId”。我该怎么做?
  • 不客气。如果它回答了您的问题,请选择它作为正确答案。
  • 我实际上已经完成了所有这些,但我现在想使用 ADAPTER 访问那个“imgId”。我该怎么做?
  • 那么 id 到底是什么?你想要视图的ID吗?您可以使用 view.getId() 从 onclicklistener 获取它
  • 是否可以使用通过适配器中的意图发送的相同 id ?
【解决方案3】:

如前面的答案所述,您可以使用putExtra
或者您可以使用setData。如果您要处理应用程序资源之外的图像,则必须处理 Uris。在这种情况下,使用

Intent intent = new Intent(getBaseContext(), SecondActivity.class);
intent.setData(uri);
startActivity(intent);

在第二个活动中你可以使用

Intent intent = getIntent();
Uri uri = intent.getData ();

Uri 对象可用于读取图像文件或有关图像的元数据。 Uri 也可以是远程文件。

【讨论】:

  • 感谢回复。图像不在应用程序资源之外,而是在可绘制文件中。我事先发送的意图在将 INTENT DATA 发送到第二个活动时效果很好。我试图做的是在我的自定义适配器(在第二个活动中调用)中访问相同的 INTENT DATA 以更改单击的 img。这可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
相关资源
最近更新 更多