1

クリックすると Web ページにリダイレクトされるように、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() を使用してそれらを呼び出すことはできません。変数を「final」にする必要があります。 '。これを回避する方法を見つけるのを手伝ってもらえますか?

残りのコードは完全に機能しますが、intent.setData(...) の行を除きます。

4

1 に答える 1

0

final であると宣言linkして、 内で直接使用できます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 に答える