如何使用额外数据为自定义数组适配器设置onClick

时间:2014-05-28 18:30:21

标签: android android-listview android-arrayadapter onitemclicklistener

我有一个ListView的自定义数组适配器。目标是让每个列表项都有一个单独的图片,并且当用户点击该项时,他们将被带到一个网页。我有图像部分工作,并有一些stackoverflow答案的地方放置onItemClickListener。它似乎会进入自定义数组适配器类但我无法弄清楚如何从列表项访问该URL。

以下是代码:

public class Animal
{
    int image_resource_id;
    String animal_type;
    String wikipedia_url;

    Animal(int image_resource_id, String animal_type, String wikipedia_url)
    {
        this.image_resource_id = image_resource_id;
        this.animal_type = animal_type;
        this.wikipedia_url = wikipedia_url;
    }
}


class AnimalViewHolder
{
    ImageView animal_image = null;
    TextView animal_name = null;
    String animal_url = "";
}


class CustomAnimalAdapter extends ArrayAdapter<Animal>
{
    Context context;
    int layoutResourceId;   
    Animal data[] = null;

    public CustomAnimalAdapter(Context context, int layoutResourceId, Animal[] data)
    {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        AnimalViewHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new AnimalViewHolder();
            holder.animal_image = (ImageView)row.findViewById(R.id.animal_image);
            holder.animal_name = (TextView)row.findViewById(R.id.animal_name);

            row.setTag(holder);

        }
        else
        {
            holder = (AnimalViewHolder)row.getTag();
        }

        Animal animal = data[position];
        holder.animal_name.setText(animal.animal_type);
        holder.animal_image.setImageResource(animal.image_resource_id);

        return row;
    }

}


protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);  

    Animal[] animal_list = {
            new Animal(R.drawable.lion, "Lion", "http://en.wikipedia.org/wiki/Lion"),
            new Animal(R.drawable.tiger, "Tiger", "http://en.wikipedia.org/wiki/Tiger"),
            new Animal(R.drawable.bear, "Bear", "http://en.wikipedia.org/wiki/Bear"),
            new Animal(R.drawable.monkey, "Monkey", "http://en.wikipedia.org/wiki/Monkey"),
            new Animal(R.drawable.moose, "Moose", "http://en.wikipedia.org/wiki/Moose"),
            new Animal(R.drawable.shark, "Shark", "http://en.wikipedia.org/wiki/Shark")
    };

    CustomAnimalAdapter adapter = new CustomAnimalAdapter(this,
            R.layout.row_item, animal_list);

    list_view_1 = (ListView)findViewById(R.id.listView1);

    list_view_1.setAdapter(adapter);

}

1 个答案:

答案 0 :(得分:1)

使用

更新适配器getview
 row.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(animal.wikipedia_url));
               context.startActivity(browserIntent);
            }
        });