Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自片段的findViewById上的NullPointerException_Java_Android_Android Fragments_Nullpointerexception - Fatal编程技术网

Java 来自片段的findViewById上的NullPointerException

Java 来自片段的findViewById上的NullPointerException,java,android,android-fragments,nullpointerexception,Java,Android,Android Fragments,Nullpointerexception,我处理这个问题的方式太多了,甚至在尝试实施了其他来自已经提出的问题的想法之后,我也无法让它工作 我正在研究碎片。我正试图从我选择的片段中找到一个视图,并在onStart()中调用的方法中使用它。这就是它的样子: @Override protected void onStart() { super.onStart(); Log.e(TAG, "On start"); if (!mBluetoothAdapter.isEnabled()) { Intent e

我处理这个问题的方式太多了,甚至在尝试实施了其他来自已经提出的问题的想法之后,我也无法让它工作

我正在研究碎片。我正试图从我选择的片段中找到一个视图,并在
onStart()
中调用的方法中使用它。这就是它的样子:

@Override
protected void onStart() {
    super.onStart();
    Log.e(TAG, "On start");
    if (!mBluetoothAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
    }
    else {
        if (mCommandService == null) 
            setupCommand();
    }
}
private void setupCommand() {
    Log.d(TAG, "setupChat()");

    mConversationArrayAdapter = new ArrayAdapter<String>(this, R.layout.message);
    mConversationView = (ListView) findViewById(R.id.in);
    mConversationView.setAdapter(mConversationArrayAdapter);

    mOutEditText = (EditText) findViewById(R.id.edit_text_out);
    mOutEditText.setOnEditorActionListener(mWriteListener);

    mSendButton = (Button) findViewById(R.id.action_send);
    mSendButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Send a message using content of the edit text widget
            TextView view = (TextView) findViewById(R.id.edit_text_out);
            String message = view.getText().toString();
            sendMessage(message);
        }
    });
    mCommandService = new CommandService(this, mHandler);
    mOutStringBuffer = new StringBuffer("");
}

@SuppressLint("ValidFragment")
public class SendSectionFragment extends Fragment {

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

            rootView.findViewById(R.id.action_send)
            .setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                }
            });

            return rootView;
        }
    }
其中217是
setupCommand()和244是
mConversationView.setAdapter(mConversationArrayAdapter)


我该怎么处理呢?
SendSectionFragment
不是我的应用程序的主要片段。

从setupCommand()中删除这一行-

它在onCreateView()中,如下所示-

mConversationView = (ListView) rootView.findViewById(R.id.in);

在设置视图之前不能调用findViewById…首先,将视图声明为全局变量。其次,重写onViewCreated()方法,然后初始化所有视图。然后您可以在onResume()方法中使用它们,而不是在onStart()中使用它们。@Lisel,这是正确的方法。您必须将视图变量移动到全局范围内,但这不是问题。因为rootView是在
片段中定义的,而不是在
setupCommand
中定义的,所以在创建片段之前,您不应该运行setupCommand();如果在此之前执行此操作,则视图还不存在。将FindViewById放在片段的onCreateView中。@Lisel您很困惑,在setupCommand()中,如果您以初始化的方式初始化它,则listview将保持为空。
mConversationView = (ListView) findViewById(R.id.in);
mConversationView = (ListView) rootView.findViewById(R.id.in);