为动态创建的图像视图设置单击侦听器

时间:2011-06-16 10:14:44

标签: android

我的应用中有一个活动显示rss提要,并且每个RSS提要旁边都有箭头图像。

我是Android新手任何帮助将不胜感激。

我将解释我正在做什么来展示rss新闻...

我有一个单独的rss的单独的虚拟xml布局..我已经设置了箭头图像的id(将导航到下一个活动)作为iv_arrow_img我正在迭代我得到的新闻源和每个新闻源我一次又一次地添加虚拟视图......我的问题是我将如何区分不同的图像箭头的ID ...因为现在所有人都有相同的ID ...我已经在我的代码中设置了onclick听众/ p>

我已经写了代码

Iterator itr = data.iterator();
 int i =0; while (itr.hasNext()) { NewsPostDTO newspostdto = itr.next();

    view = inflater.inflate(R.layout.rl_news_item, null);
    lnContentView.addView(view, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);


    ivArrowfwd = (ImageView) view.findViewById(R.id.iv_arrowfwd);

    tvNewsHeading.setText(newspostdto.getFeaturedDesc());
    tvNewsContent.setText(newspostdto.getDate() + " - " + newspostdto.getTitle());
    ivArrowfwd.setId(id);
    ivArrowfwd.setTag(newspostdto);
    ivArrowfwd.setOnTouchListener(new OnTouchListener(){

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {

                           System.out.println("sdfsdf" +(ImageView) view.findViewById(id).getTag());

            return false;
        }
    });
    id++;
}

但是我没有为不同的新闻获得不同的标签,虽然它们是不同的......任何人都可以告诉我我做错了什么......?

2 个答案:

答案 0 :(得分:2)

认为该视图是最终的(在其他情况下,我认为,你无法编译它)所以它指向你创建的最后一个视图...没有必要使用findViewById ...如果你有图像看看哪个尝试这样的事情:

ivArrowfwd.setOnTouchListener(new OnTouchListener(){
    @Override
    public boolean onTouch(View v, MotionEvent me) {
        ImageView iv = (ImageView)v;
        System.out.println("sdfsdf" + iv.getTag());
        return false;
    }
});
无论如何...... 您应该考虑使用ListView

答案 1 :(得分:0)

您可能想要的是以下内容。您必须使用android:id="+@id/XXXXXXX"在.xml文件中提供的ID来查找您的观看次数。

您的代码将如下所示:

String id;
int resID;
ImageView views[] = new ImageView[NUM_OF_VIEWS];

for(int i = o; i < NUM_OF_VIEWS; i++){
    id = "ImageViewIdentifier" + i; // Do name their id's in the .xml file so that you can easily loop over them.
    resID = getResources().getIdentifier(resID, "defType", "defPackage"); // see here: http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String, java.lang.String, java.lang.String)
    views[NUM_OF_VIEWS-1] = (ImageView) findViewById(resID);
    views[NUM_OF_VIEWS-1].setOnTouchListener(new OnTouchListener(){
            // DO Stuff here
        }
    }
}