java - Fragment 中的 findViewById 返回 Null

标签 java android android-fragments

我尝试过 getActivity().findViewById()getView()。这是我的 fragment 中的代码。它们都返回 null..

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.edit_viewer, container, false);

    Bundle bundle = getArguments();
    id = bundle.getLong("VIEWER_ID");

    DatabaseHelper dbHelper = new DatabaseHelper(getActivity());

    username = (EditText)getView().findViewById(R.id.username);
    password = (EditText)getView().findViewById(R.id.entry);
    hostUrl = (EditText)getView().findViewById(R.id.hostUrl);
    webApp = (EditText)getView().findViewById(R.id.webApp);
    modelId = (EditText)getView().findViewById(R.id.modelId);
    properties = (EditText)getView().findViewById(R.id.properties);

Activity 代码

public class EditViewerActivity extends ActionBarActivity {
    private Long id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_viewer);

        Intent intent = getIntent();
        Long id = intent.getLongExtra("VIEWER_ID", 0);

        ViewerEditFragment newFragment = new ViewerEditFragment();
        Bundle bundle = new Bundle();
        bundle.putLong("VIEWER_ID", id);
        newFragment.setArguments(bundle);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, newFragment)
                    .commit();
        }

    }

edit_viewer.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/edit_viewer"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TextView
        style="?android:attr/listSeparatorTextViewStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="sfn Credentials"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/username"
            android:paddingLeft="10dp" />
        <EditText
            android:id="@+id/username"
            android:hint="Admin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/password"
            android:paddingLeft="10dp" />
        <EditText
            android:id="@+id/entry"
            android:inputType="textPassword"
            android:hint="Password"
            android:minWidth="100dip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <TextView
        style="?android:attr/listSeparatorTextViewStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Host Settings"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/host_url"
            android:paddingLeft="10dp" />
        <EditText
            android:id="@+id/hostUrl"
            android:hint="http://www.mysfn.com"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/web_app"
            android:paddingLeft="10dp" />
        <EditText
            android:id="@+id/webApp"
            android:hint="sfn"
            android:minWidth="100dip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/model_id"
            android:paddingLeft="10dp" />
        <EditText
            android:id="@+id/modelId"
            android:hint="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/properties"
            android:paddingLeft="10dp" />
        <EditText
            android:id="@+id/properties"
            android:hint="dv=icon"
            android:minWidth="100dip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <Button android:id="@+id/close"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Save" />
</LinearLayout>

最佳答案

改变这个

 username = (EditText)getView().findViewById(R.id.username);

 username = (EditText)rootView.findViewById(R.id.username);

并对所有其他 View 执行相同的操作

关于java - Fragment 中的 findViewById 返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952692/

相关文章:

android - onStart() 和 onResume() 的区别

android - Activity 和 Service 的生命周期

java - 在 fragment 中链接两个按钮

java - 我的图形用户界面在运行时占用了太多资源

java - 标记一个 fun/property 仅在 Kotlin/Java 中使用

java - Android OpenGLES 在 GLThread 中加载纹理然后告诉 UI 线程运行一个方法

java - 如何从底部导航 fragment 移动到其他 fragment

Android SDK fragment 支持

java - java 的 href 链接

java - 如何在每次迭代后发送成功消息