从NetworkImageView获取网址

时间:2015-05-11 19:30:20

标签: android android-imageview

我填充了ListView,其中每行中的一个项目是NetworkImageView。现在我通过Intent putExtra()将每一行传递给detail_product活动。

使用TextViews我正在做:

String pName = ((TextView) view.findViewById(R.id.name)).getText().toString();
...
i.putExtra(TAG_NAME, pName);

如何继续使用NetworkImageView?我无法使用getTextgetResources()

修改

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_row, null);

    if (imageLoader == null)
        imageLoader = AppController.getInstance().getImageLoader();
    NetworkImageView thumbNail = (NetworkImageView) convertView
            .findViewById(R.id.thumbnail);

    TextView name = (TextView) convertView.findViewById(R.id.name);


    Product m = productItems.get(position);

    // thumbnail image
    String url = m.getThumbnailUrl();
    thumbNail.setImageUrl(url, imageLoader);
    thumbNail.setTag(url);

    // name
    name.setText(m.getName());



}

1 个答案:

答案 0 :(得分:1)

没有可用于NetworkImageView的getter,它为您提供了设置的URL。

一种方法是为NetworkImageView使用标记。您可以将图像URL设置为NetworkImageView的标记。例如。 holder.thumbNail.setTag(imgUrl)位于适用于ListView的getView(...)中。

在ListView的onItemClick侦听器

    listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        NetworkImageView v = (NetworkImageView) view.findViewById(R.id.thumbnail);
        String imgUrl = (String) v.getTag();

另一种方法可能是通过反射[请避免,因为你可以看到我提到“mUrl”,一个在NetworkImageView中使用的私有变量,并且很可能在任何时候发生变化]

    Class nw = NetworkImageView.class;
    try {
        Field url=nw.getDeclaredField("mUrl");
        url.setAccessible(true);
        String imgUrl=(String) url.get(your_networkview_object);
    } catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
        e.printStackTrace();
    }