Java 当我尝试设置onClickListener时,应用程序崩溃
当我试图在按钮上设置onClickListener(btOK)时,我需要帮助解决应用程序崩溃的问题 这是我的MainActivity.java:Java 当我尝试设置onClickListener时,应用程序崩溃,java,android,android-fragments,Java,Android,Android Fragments,当我试图在按钮上设置onClickListener(btOK)时,我需要帮助解决应用程序崩溃的问题 这是我的MainActivity.java: package edu.np.ece.mapg.newsweather; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.FragmentTransaction; import android.os.Bundle; import an
package edu.np.ece.mapg.newsweather;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import edu.np.ece.mapg.proj.fragments.TabsPagerAdapter;
import edu.np.ece.mapg.proj.rss.RssItem;
import edu.np.ece.mapg.proj.rss.RssReader;
public class MainActivity extends FragmentActivity {
ViewPager mViewPager;
TabsPagerAdapter mAdapter;
ActionBar mActionBar;
String[] tabStrings = {"Main", "News", "Weather"};
TextView tv;
Button btOK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btOK = (Button)findViewById(R.id.btOK);
tv = (TextView)findViewById(R.id.textView1);
btOK.setOnClickListener(asd);
//Initialize
mViewPager = (ViewPager)findViewById(R.id.pager);
mActionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); //Initialize the created adapter class
mViewPager.setAdapter(mAdapter);
mActionBar.setHomeButtonEnabled(false);
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//Add tabs
for(String tab_name : tabStrings){
mActionBar.addTab(mActionBar.newTab().setText(tab_name).setTabListener(tabListener));
}
mViewPager.setOnPageChangeListener(pageListener);
// MINI PROJ PHASE 2 //
try{
RssReader rssReader = new RssReader("http://news.google.com/news?pz=1&cf=all&ned=en_sg&hl=en&output=rss");
ListView newsListView = (ListView)findViewById(R.id.newsListView);
//Create list adapter
ArrayAdapter<RssItem> adapter = new ArrayAdapter<RssItem>(getBaseContext(), android.R.layout.simple_list_item_1, rssReader.getItems());
//Set list adapter for listview
newsListView.setAdapter(adapter);
//Set listview item click listener
newsListView.setOnItemClickListener((OnItemClickListener) new ListListener(rssReader.getItems(), this));
adapter.notifyDataSetChanged();
}
catch(Exception e){
Log.e("SimpleRssReader", e.getMessage());
}
}
View.OnClickListener asd = new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText("OK");
}
};
ViewPager.OnPageChangeListener pageListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// On changing page, make respected tab selected
mActionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {};
@Override
public void onPageScrollStateChanged(int arg0) {};
};
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
包edu.np.ece.mapg.newsweather;
导入android.app.ActionBar;
导入android.app.ActionBar.Tab;
导入android.app.FragmentTransaction;
导入android.os.Bundle;
导入android.support.v4.app.FragmentActivity;
导入android.support.v4.view.ViewPager;
导入android.util.Log;
导入android.view.Menu;
导入android.view.view;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListView;
导入android.widget.TextView;
导入edu.np.ece.mapg.proj.fragments.TabsPagerAdapter;
导入edu.np.ece.mapg.proj.rss.RssItem;
导入edu.np.ece.mapg.proj.rss.RssReader;
公共类MainActivity扩展了FragmentActivity{
ViewPager mViewPager;
TabsPagerAdapter mAdapter;
ActionBar mActionBar;
String[]tabStrings={“Main”、“News”、“Weather”};
文本视图电视;
按钮btOK;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btOK=(按钮)findViewById(R.id.btOK);
tv=(TextView)findViewById(R.id.textView1);
btOK.setOnClickListener(asd);
//初始化
mViewPager=(ViewPager)findViewById(R.id.pager);
mActionBar=getActionBar();
mAdapter=new TabsPagerAdapter(getSupportFragmentManager());//初始化创建的适配器类
mViewPager.setAdapter(mAdapter);
mActionBar.setHomeButtonEnabled(假);
mActionBar.setNavigationMode(ActionBar.NAVIGATION\u MODE\u选项卡);
//添加选项卡
用于(字符串选项卡\名称:tabStrings){
mActionBar.addTab(mActionBar.newTab().setText(选项卡名称).setTabListener(tabListener));
}
mViewPager.setOnPageChangeListener(pageListener);
//小型工程第二期//
试一试{
RssReader RssReader=新RssReader(“http://news.google.com/news?pz=1&cf=all&ned=en_sg&hl=en&output=rss");
ListView newsListView=(ListView)findViewById(R.id.newsListView);
//创建列表适配器
ArrayAdapter=newArrayAdapter(getBaseContext(),android.R.layout.simple_list_item_1,rssReader.getItems());
//为listview设置列表适配器
setAdapter(适配器);
//设置listview项单击侦听器
newsListView.setOnItemClickListener((OnItemClickListener)新ListListener(rssReader.getItems(),this));
adapter.notifyDataSetChanged();
}
捕获(例外e){
e(“SimplersReader”,e.getMessage());
}
}
View.OnClickListener asd=新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
tv.setText(“OK”);
}
};
ViewPager.OnPageChangeListener pageListener=新建ViewPager.OnPageChangeListener(){
@凌驾
已选择页面上的公共无效(内部位置){
//在“更改页面”上,选择“受尊重”选项卡
mActionBar.setSelectedNavigationItem(位置);
}
@凌驾
页面上的公共无效已滚动(int arg0、float arg1、int arg2){};
@凌驾
公共无效onPageScrollStateChanged(int arg0){};
};
ActionBar.TabListener TabListener=新建ActionBar.TabListener(){
@凌驾
已选择公共空页(选项卡,碎片事务ft){
//TODO自动生成的方法存根
}
@凌驾
已选择的公共事务(选项卡,碎片事务ft){
setCurrentItem(tab.getPosition());
}
@凌驾
已重新选择公共无效页签(页签,碎片事务){
//TODO自动生成的方法存根
}
};
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
news_fragment.xml,我设置按钮的地方:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/btOK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<ListView
android:id="@+id/newsListView"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
更改
View.OnClickListener asd=newview.OnClickListener()
到
btOK.OnClickListener(新视图.OnClickListener())
同样地
SetOnPageListener
到mviewpage
和TabListener
到mActionBar
您拥有
setContentView(R.layout.activity_main);
activity\u main.xml
没有id为btOK的按钮
您的news\u fragment.xml
有一个按钮
所以,若你们在活动中初始化按钮,你们会得到导致崩溃的NullPointerException
这与TextView
和ListView
相同
findViewById
将在当前展开的布局中查找id为的视图
按钮ok和textView1在news\u fragment.xml中,您可以在设置news\u fragment.xml的fragment中获取这些视图,您可以提供stacktrace吗?您的选项卡的Geradapter
在哪里?它的页面应该是Fragment
,该片段应该包含btOK,tv
等的代码OnClickListener
很好。我认为应该使用该片段来处理点击。看我的评论。