繁体   English   中英

FindViewbyId始终在片段中返回Null

[英]FindViewbyId always returns Null in Fragment

我有一个xml文件,如下所示:

One.xml

<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:background="@drawable/additemsbackground"
        android:orientation="horizontal"
        android:layout_marginRight="20dp"
        android:layout_marginLeft="20dp">
  <ImageView
            android:id="@+id/btnaddtxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right|center_vertical"
            android:layout_marginRight="10dp"
            android:adjustViewBounds="true"
            android:src="@drawable/add" />
    </LinearLayout>

这是我的MainFragment:

  @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
       LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this);
       View myView = layoutInflater.inflate(R.layout.One,
            null);
       ImageView btnadd=(ImageView)myView.findViewById(R.id.btnaddtxt);
       btnadd.setOnClickListener(
        new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                    Toast.makeText(getApplicationContext(),
                              "Clicked Add Text Button" , Toast.LENGTH_LONG)
                              .show();
                }
            });
  }

当我尝试获取MainFragment所示的ImageView ,它总是返回null。

谁能说我这样做的正确方法是什么?

使用Fragments时,请在onCreateView(...)而不是onCreate(...)中初始化视图。 像这样

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.delivery_boys, container,
                false);
        ImageView btnadd=(ImageView)rootView .findViewById(R.id.btnaddtxt);

        return rootView;
    }

您应该在片段类的onCreateView中膨胀视图

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view= inflater.inflate(R.layout.delivery_boys, container,
                false);
        ImageView img=(ImageView)view.findViewById(R.id.your_img_view);

        return view;
    }

您将onCreateView函数附加到活动,并在onCreate方法中获得了查看膨胀的机会片段已初始化且尚未附加到活动。

@Override
public View setContentView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (mChangeVehiclesView == null) {
        mChangeVehiclesView = inflater.inflate(
                R.layout.frag_vehicles_registered, null);
    } else {
        ((ViewGroup) mChangeVehiclesView.getParent())
                .removeView(mChangeVehiclesView);
    }
mvehicleListView = (ListView) mChangeVehiclesView
            .findViewById(R.id.frag_vehicle_registeres_list);
    return mChangeVehiclesView;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM