如何在android中动态获取ViewId

How to get ViewId dynamically in android

如何获取android中动态创建的View的ID?实际上我的布局中有很多视图,我想要用户触摸的那个视图的 id。有可能吗?如果是,那该怎么做?

在下面的代码中创建了新的框架布局,我为此布局生成了 generateViewId 并将此 id 保存为 HashMap (logoResizingRecordList) 的键。

 FrameLayout fm=new FrameLayout(getApplication());
 FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(400,300);
                    fm.addView(img_pinch,params);

 int FrameLayoutID=fm.generateViewId();

 logoResizingRecordList.put(FrameLayoutID,logoObj);
 fm.setOnTouchListener(logoTouchListner);

这里 OnTouch 我已经将 FrameLayout 的实例分配给 temp_img_logo。

public boolean onTouch(final View p_v, MotionEvent p_event)
    {            
        if(p_v instanceof FrameLayout) {           
            temp_img_logo=(FrameLayout)p_v;
        }

这里我想获取上面 FrameLayout (fm) 的 id 但它 return 任何视图的默认 Id 即 -1

logoResizingRecordList.get(temp_img_logo.getId())

现在我的问题是,是否可以获取我动态创建的 fm (FrameLayout) 的 ID?如果是,请帮我找到它。

将所有这些的 onclick 侦听器设置为单个侦听器,并切换 onclick 方法的 arg1.getId()

是的,你可以,

首先,为了得到id,你必须设置id,

TextView txt  = new TextView(context);
txt.setId(some integer);

然后你必须将动态视图保存在数组或列表之类的地方。 然后你可以得到被触摸的位置,并得到相关的视图id,如下所示,

int id = textViewList.get(position).getId();

Android 不会动态生成 ID。你必须自己做。

一个对您有帮助的简单示例:

public static final int TEXT_VIEW1_ID = 1001;

TextView textView1 = new TextView(Context);
textView1.setId(TEXT_VIEW1_ID);

relativeLayout.addView(textView1);
relativeLayout.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        if(view.getId() == TEXT_VIEW1_ID){
            Toast.makeText(context, "TextView1 was touched.", Toast.LENGTH_SHORT).show();
            return true;
        }

        return false;
    }
});