findViewById 中的错误尝试了所有内容


public class fingerp  extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_fingerp, container, false);
        return rootView;
    }
}

此 ID 用于带按钮的选项卡式视图

String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/documents");
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myDir.mkdirs();
    EditText edit = (EditText)findViewById(R.id.editText);
    String edt = edit.getText().toString();
    File file = new File (myDir,edt);
}

这是为了将文件夹保存在Android的外部存储中,我正在从用户那里输入文件夹名称,并使用它,我正在使用此语句↓

EditText edit = (EditText)findViewById(R.id.editText);
String edt = edit.getText().toString();

但 findViewById 给出错误

方法 findViewById() 未在类 Fragment 中实现。该方法适用于ActivityView

因此,请尝试以下更改:

public void onCreate(Bundle savedInstanceState) {
    ....
    EditText edit = (EditText) getActivity().findViewById(R.id.editText);
    ....
}

更新

正如下面评论的那样,您不能依赖findViewById() onCreate方法从父活动中查找视图。这在 DOCS 中也有标记:

请注意,可以在片段的活动仍在创建过程中调用它。因此,此时不能依赖正在初始化的活动的内容视图层次结构之类的内容。如果要在创建活动本身后执行工作,请参阅 onActivityCreated(Bundle)。

这样,如果您的EditTextR.layout.fragment_fingerp的一部分

你可以做:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_fingerp, container, false);
    EditText edit = (EditText) rootView.findViewById(R.id.editText);
    String edt = edit.getText().toString();
    File file = new File (myDir,edt);
    return rootView;
}

或者只是将代码从onCreate()移动到onActivityCreated

public void onActivityCreated (Bundle savedInstanceState) {
    ...              
    EditText edit = (EditText) getActivity().findViewById(R.id.editText);
    ...
}

将代码从 onCreate 移动到 onViewCreated,这专门是一个 Fragment 生命周期回调。

最新更新