如何在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;
}
});
如何获取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;
}
});