Java Android NullPointerException。为什么?
我是android编程新手,下一个问题是: 在我的fragment类中,当用户单击按钮时,我需要执行一些操作。 这是我的代码,他很简单:Java Android NullPointerException。为什么?,java,android,Java,Android,我是android编程新手,下一个问题是: 在我的fragment类中,当用户单击按钮时,我需要执行一些操作。 这是我的代码,他很简单: public class InboxFragment extends Fragment{ private ListView ll; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceS
public class InboxFragment extends Fragment{
private ListView ll;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.inbox_fragment, container, false);
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Button filter_bt;
filter_bt = (Button) getView().findViewById(R.id.filter_button);
filter_bt.setOnClickListener((OnClickListener) this);
}
}
这是我的布局文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/filter_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/red"
android:text="Filter by date"
android:textColor="@color/white" />
</LinearLayout>
日志(2)
所有代码都很简单,按钮存在,但为什么我的应用程序会崩溃
谢谢大家。getView()
在onCreateView
返回之前返回null。在调用onCreateView()
之前,将该片段移动到onViewCreatedonCreate()
中,这样在尝试获取布局时就不会绘制布局
从onCreate获取代码并将其移动到onViewCreated()
问候 你能试试这样的吗
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View content = inflater.inflate(R.layout.inbox_fragment, container, false);
Button filter_bt;
filter_bt = (Button) content.findViewById(R.id.filter_button);
filter_bt.setOnClickListener((OnClickListener) this);
return content;
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
b因为onCreate在onCreateView之前被调用。它会给您一个nullpointerexception,因为您的getView()尚未定义。我发现了这个问题。
有正确的类别代码:
public class InboxFragment extends Fragment implements View.OnClickListener{
private ListView ll;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.inbox_fragment, container, false);
}
public void onViewCreated(View view, Bundle state)
{
super.onViewCreated(view, state);
Button filter_bt;
filter_bt = (Button) view.findViewById(R.id.filter_button);
filter_bt.setOnClickListener(this);
}
public void OnClick(View view)
{
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}
哪一行正在执行NullPointerException?您可以在问题中发布堆栈跟踪。当然可以。行内filter_bt=(按钮)getView().findviewbyd(R.id.filter_按钮)代码>应该是这样的:?public View onCreateView(LayoutInflater充气机、ViewGroup容器、Bundle savedInstanceState){super.onCreate(savedInstanceState);按钮filter_bt;filter_bt=(Button)getView().findViewById(R.id.filter_按钮);filter_bt.setOnClickListener((OnClickListener)this);返回充气机.inflate(R.layout.inbox_fragment,container,false);}
no,我还有:04-22 16:35:57.090:E/AndroidRuntime(15293):java.lang.NullPointerException
哦,我看到了问题,你正在onCreateView()
上粘贴它,尝试覆盖onViewCreated())
,这是在绘制布局后为我执行的函数:filter_bt=(Button)getView().findviewbyd(R.id.filter_Button);
这不是一个解决方案。因为现在屏幕上没有我的元素(其中有我的布局文件)
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View content = inflater.inflate(R.layout.inbox_fragment, container, false);
Button filter_bt;
filter_bt = (Button) content.findViewById(R.id.filter_button);
filter_bt.setOnClickListener((OnClickListener) this);
return content;
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
public class InboxFragment extends Fragment implements View.OnClickListener{
private ListView ll;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.inbox_fragment, container, false);
}
public void onViewCreated(View view, Bundle state)
{
super.onViewCreated(view, state);
Button filter_bt;
filter_bt = (Button) view.findViewById(R.id.filter_button);
filter_bt.setOnClickListener(this);
}
public void OnClick(View view)
{
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}