我搜索了很多线程,但无法理解我的代码中的问题。我试图在片段的按钮上添加setOnClickListener
功能。它给了我
allNews.setOnClickListener上的nullpointer异常(new View.OnClickListener()。
调试后,我知道变量allNews
为空。
下面是我的布局代码。
<LinearLayout
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id = "@+id/b_all"
android:layout_width="70dp"
android:layout_height="70dp"
android:gravity="center"
android:text="All \n news"
android:textColor="#FFF"
android:textSize="15sp"
android:background="@drawable/button_bg_round"
android:padding="5dp"
android:textAllCaps="false"
/>
这是我的java代码:
public class CategoriesFragment extends Fragment {
public Button allNews;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_news_menu, container, false);
getActivity().setTitle("Play");
allNews = (Button) rootView.findViewById(R.id.b_all);
return rootView;
}
public void onViewCreated(View view, @android.support.annotation.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
allNews.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
startActivity(new Intent(getActivity(), Newsmain.class));
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
我无法理解我错过了什么。同一个xml中有一个scrollview
。我们应该单独处理这样的布局/字段吗?
对此方面的任何帮助表示高度赞赏。
由于 萨蒂亚
解决:我用activity_news_category重命名了xml,然后该变量不再为null。上面的xml被命名为activity_news_menu。所有试图帮助的人都有Thnx。
答案 0 :(得分:0)
public void onViewCreated(View view, @android.support.annotation.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
allNews = (Button) view.findViewById(R.id.b_all);
allNews.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
startActivity(new Intent(getActivity(), Newsmain.class));
} catch (Exception e) {
e.printStackTrace();
}
}
});
更新:
而不是rootView
它应该是view
在allNews = (Button) rootView.findViewById(R.id.b_all);
中添加onViewCreated()
,然后将其从onCreateView()
答案 1 :(得分:0)
public View onCreateView(最终的LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.activity_news_menu, container, false);
getActivity().setTitle("Play");
allNews = (Button) rootView.findViewById(R.id.b_all);
allNews.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
try {
startActivity(new Intent(getActivity(), Newsmain.class));
} catch (Exception e) {
e.printStackTrace();
}
}
});
return rootView;
}
在OncreateView方法中使用set onclicklistener。希望这有帮助
答案 2 :(得分:0)
1)正确关闭LinearLayout
。
2)删除android:id = "@+id/b_all"
之间的空格,以便:
<LinearLayout
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/b_all"
android:layout_width="70dp"
android:layout_height="70dp"
android:gravity="center"
android:text="All \n news"
android:textColor="#FFF"
android:textSize="15sp"
android:background="@drawable/button_bg_round"
android:padding="5dp"
android:textAllCaps="false"
/>
</LinearLayout>
然后重建项目。