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);