b =(Button)findViewById(R.id.mybutton)之间有什么区别;和b =(Button)view.findViewById(R.id.mybutton);

时间:2016-01-20 05:46:33

标签: android

b是Button类的对象 someplaces使用view.findViewById必须

6 个答案:

答案 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布局或尝试访问片段中的窗口小部件时使用它,因为片段没有关于视图的直接信息。首先需要获取有关根视图的信息。