b是Button类的对象 someplaces使用view.findViewById必须
答案 0 :(得分:3)
如果你写:
b=(Button) findViewById(R.id.mybutton);
它直接用于您的布局
但如果你写:
b= (Button) view.findViewById(R.id.mybutton);
用于膨胀布局(自定义布局)
例如: 自定义对话框
Listview的自定义布局,扩展了BaseAdapter,ArrayAdapter,.... 它用于连接Layoutinflater
答案 1 :(得分:2)
findViewById
是一种方法。有时您可以像这样引用:
b=(Button) findViewById(R.id.mybutton);
这是此的简写:
b=(Button) this.findViewById(R.id.mybutton);
IDE(Android Studio或其他)了解findViewById
是一种方法,因为它是在具有(或“实现”)该方法的对象中调用的。但是,这是许多对象实现的方法。因此,如果您想“使用'R'id'查找视图”,有时您希望从另一个对象中找到它,而不是进行调用的对象。
例如,Activity
实现此方法。但是如果View
中有一个Activity
(就像列表中的一行)并且您想要从该行中检索值,那么您可以执行以下操作:
b=(Button) myRowView.findViewById(R.id.mybutton);
在这种情况下,myRowView
是屏幕上应该有一个id为“mybutton”的按钮的东西。如果您没有告诉IDE /编译器检查Activity
中的“行”,那么它将假设您正在尝试查找在Activity
中直接定义的视图。这可能有用,但是如果你有50行,并且它们都有相同id的按钮,你可能不会得到正确的...但当你通过指定指定哪一行时对象,然后你得到正确的。
这里的关键是可以在没有关键字this
的情况下调用方法,因此有时看起来有些“神奇”。
答案 2 :(得分:0)
if you declare button directly from your layout you write this:
b= (Button) findViewById(R.id.mybutton);
else if you inflate any layout to your activity you should write this:
View view;
LayoutInflater subCatHead = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = subCatHead.inflate(R.layout.sub_cat_headerlyt, null);
b= (Button) view.findViewById(R.id.mybutton);
答案 3 :(得分:0)
在您的活动中,如果您直接声明按钮,请写下:
button = (Button) findViewById(R.id.mybutton);
在自定义适配器的情况下 否则,如果你为你的活动夸大任何布局,应写下:
button = (Button) view.findViewById(R.id.mybutton);
在自定义数组适配器
中 @Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = inflater.inflate(R.layout.blog_stage_item, parent, false);
mStageListModel = null;
mStageListModel = (BlogStageDetailDTO) data.get(position);
TextView label = (TextView) row.findViewById(R.id.txt_spinner_item);
// Set values for spinner each row
label.setText(mStageListModel.getStage_name());
return row;
}
答案 4 :(得分:0)
如果您直接使用活动布局,请使用
button = (Button) findViewById(R.id.mybutton);
当使用像Base adapter, Arrayadapter, Fragment
这样的自定义布局时,您必须传递主容器视图,并调用
button = (Button) view.findViewById(R.id.mybutton);
答案 5 :(得分:0)
b =(Button)view.findViewById(R.id.mybutton); 当您使用inflater布局或尝试访问片段中的窗口小部件时使用它,因为片段没有关于视图的直接信息。首先需要获取有关根视图的信息。