【问题标题】:Get Single View From FrameLayout从 FrameLayout 获取单个视图
【发布时间】:2016-04-13 09:37:03
【问题描述】:
我有 FrameLayout,我在其中添加了许多视图,第一种视图是 ImageViews,第二种是 TextViews。
// adding TextView
textview.setText(text);
textview.setTypeFace(typeface);
framelayout.addView(textview);
// adding ImageView
imageview.setImageDrawable(getResources().getDrawable(R.drawable.c10));
framelayout.addView(imageview);
现在我想弄清楚的是
如何获取用户点击的单个视图?
【问题讨论】:
标签:
android
textview
imageview
android-framelayout
【解决方案1】:
一种方法是在将所有视图添加到 FrameLayout 之前单独设置具有功能的点击侦听器。
不过,最好像这样预定义一个 onClickListener:
View.OnClickListener myListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
}
};
并为所有视图设置相同的值。在 onClick 中,有两种方法可以检测点击了哪个视图:
1) 如果你确定只有一个图像和一个文本视图,你可以在 onClick(View v) 中使用以下内容
if (v instanceof ImageView){
}else if(v instanceof TextView){
}
2) 或者您可以为视图设置 ID,然后使用它:
switch (v.getId()) {
}
另外,不要忘记为每个视图设置 id,因为 id 是我们将运行 switch case 的内容。
注意:API 17 以上可以使用 view.generateViewId() 获取 id 并保存
希望这会有所帮助!
【解决方案2】:
你必须先给视图设置一个点击监听器,所以android会向你的应用发送点击事件。
类似
textview.setOnClickListener((new View.OnClickListener() {
@Override
public void onClick(View v) {
//response user click action
}
});
当用户点击textview时,这个onClick(View v)会被调用。