【问题标题】:On Create View in Fragment, getting null pointer exception when getting a string from EditText在片段中创建视图时,从 EditText 获取字符串时出现空指针异常
【发布时间】:2014-11-05 19:47:00
【问题描述】:

从 EditText 获取字符串时出现空指针异常。是因为我使用的是片段,我应该使用异步任务吗?我不知道为什么会这样。添加s1 = text1.getText().toString(); 行时出现错误。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.tromto.analyzevalue.MainActivity$PlaceholderFragment" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

 </LinearLayout>



public class MyFragment1 extends Fragment {
    EditText text1;
    Button button1;
    String s1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);

        Toast t = Toast.makeText(getActivity(), "Section 1", Toast.LENGTH_LONG);
        t.show();
    }

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

        final View v = inflater.inflate(R.layout.fragment_main, container, false);

        text1 = (EditText)getActivity().findViewById(R.id.editText1);
        s1 = text1.getText().toString();

        return v;
    }
}

【问题讨论】:

    标签: java android fragment


    【解决方案1】:

    您正在尝试从 Fragment 的父 Activity 中 findViewById。相反,您应该在 Fragment 的视图中找到 ViewById。

    使用:

    text1 = (EditText) v.findViewById(R.id.editText1);
    

    代替:

    text1 = (EditText)getActivity().findViewById(R.id.editText1);
    

    【讨论】:

    • 虽然这个答案是正确的,但请考虑这样一个事实,即此时您的 EditText 将有一个空值(或其默认值)。没有评论,只是一个注释。
    • 默认值不会在这一行报错,但之后可能会出问题。
    • 那么我应该把编辑文本放在哪里听用户的价值。我应该执行异步任务还是最好的程序是什么?
    • 这是一个不同的问题,但无论如何,您只需将 OnClickListener 设置为您的按钮并从那里获取 EditText 的值
    • 我确实设置了一个按钮来获取编辑文本的值,但正如@Knickedi 预测的那样,编辑文本的值是空的。
    【解决方案2】:

    我刚刚回答了类似的问题。开始时 EditText1 中有空值。请勿在创建时使用解决方案,或在必要时在其中填写一些文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2021-06-29
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      相关资源
      最近更新 更多