1

我正在尝试创建一个通用页面,该页面创建带有附加 URL 的图像按钮,以便它们在点击时将您重定向到网页。编译时也会生成按钮的数量以及链接,它们是从在线资源中检索的。

我的问题是,当我尝试在通用循环中创建 OnClickListener 时,在单击按钮之前不会创建它们,因此直到循环结束时才会创建它们。

 LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  View rowView = inflater.inflate(rowResourceId, parent, false);
  ImageButton imageButton = (ImageButton) rowView.findViewById(R.id.imageButton);
  int id = Integer.parseInt(Ids[position]);
  String imageFile = MainActivity.GetbyId(id, MainActivity.getSaleArray()).imageURL;
  String link=MainActivity.GetbyId(id, MainActivity.getSaleArray()).link;
  imageButton.setTag(link);

  imageButton.setOnClickListener(new ImageButton.OnClickListener() {

        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse((String) imageButton.getTag()));
            context.startActivity(intent);
        }
     }); 

在上面的代码中,我有一个带有 ID 和链接的未知大小的数组,我在每个按钮的标签中有我需要的数据,但我不能在 OnClick 块中使用 imageButton.getTag() 调用它们,它要求变量是“最终的” '。你能帮我找到解决这个问题的方法吗?

其余代码完美运行,除了intent.setData(...)

4

1 回答 1

0

您可以声明link为 final 并直接在OnClickListener.

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View rowView = inflater.inflate(rowResourceId, parent, false);
ImageButton imageButton = (ImageButton) rowView.findViewById(R.id.imageButton);
int id = Integer.parseInt(Ids[position]);
String imageFile = MainActivity.GetbyId(id, MainActivity.getSaleArray()).imageURL;
final String link = MainActivity.GetbyId(id, MainActivity.getSaleArray()).link;

imageButton.setOnClickListener(new ImageButton.OnClickListener() {

    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(link));
        context.startActivity(intent);
    }
}); 
于 2013-09-24T07:02:59.743 回答