加入fragment之后 setonclickListener 报错
============问题描述============
package com.aeron.cartoonapp.activity; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.Toast; import com.aeron.cartoonapp.fragment.BaseFragment; import com.aeron.cartoonapp.fragment.SlidingMenuFragment; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; public class HomeActivity extends SlidingFragmentActivity implements OnClickListener { ImageButton showMenuBtn; private static SlidingMenu menu; BaseFragment fragment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.frame_home_activity); //装载视图 fragment = new BaseFragment(); getFragmentManager().beginTransaction().replace(R.id.homeactivity_frame, fragment).commit(); setBehindContentView(R.layout.slidingmenufragment_frame); menu = new SlidingMenu(this); Log.i("sadas", "fuck homeActivity"); showMenuBtn = (ImageButton)findViewById(R.id.showMenuBtn); // showMenuBtn.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // // TODO Auto-generated method stub //// Toast.makeText(HomeActivity.this, "dsads", Toast.LENGTH_SHORT).show(); // if(!menu.isMenuShowing())menu.showMenu(); // else menu.showContent(); // } // }); // showMenuBtn.setOnClickListener(this); inintSilidingMenu(); } public void inintSilidingMenu() { // TODO Auto-generated method stub //menu属性 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); menu.setFadeDegree(0.35f); menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); //menu视图 menu.setMenu(R.layout.slidingmenufragment_frame); getFragmentManager().beginTransaction().replace(R.id.frame_slidingmenufragment, new SlidingMenuFragment()).commit(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.home, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } private final static int TIME_FINISH = 2000; private long mExitTime = 0; //再按一次推出程序实现 //实现原理:1.如果滑动菜单还在,则关闭滑动菜单 //2.在主界面,两次按后退键:间隔小于2S推出程序 否则继续提示 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(!menu.isMenuShowing()&&keyCode == KeyEvent.KEYCODE_BACK){ long currentTime = System.currentTimeMillis(); if(currentTime - mExitTime >TIME_FINISH){ Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); mExitTime = System.currentTimeMillis(); }else{ finish(); System.exit(0); } return false; } else if(menu.isMenuShowing()&&keyCode == KeyEvent.KEYCODE_BACK) { menu.showContent(); return false; } return super.onKeyDown(keyCode, event); } @Override public void onClick(View v) { // TODO Auto-generated method stub } }
package com.aeron.cartoonapp.fragment; import com.aeron.cartoonapp.activity.R; import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; public class BaseFragment extends Fragment { //声明4个fragment HomeFragment homefragment; CategoryFragment categoryfragment; HotFragment hotfragment; AboutFragment aboutfragment; //声明RadioGroup RadioGroup rg; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //定义各个变量 homefragment = new HomeFragment(); categoryfragment = new CategoryFragment(); hotfragment = new HotFragment(); aboutfragment = new AboutFragment(); rg = (RadioGroup)getActivity().findViewById(R.id.tab_radiogroup_ID); Log.i("sadas", "fuck onCreat"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub Log.i("sadas", "fuck onCreatView"); View view = inflater.inflate(R.layout.basefragment_frame, null); return view; } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } public class tabListener implements OnCheckedChangeListener{ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { } } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Log.i("fuck", " onViewCreated"); //onCreatView之后执行 //测试第一步:将HomeFragment加入视图 } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/frame_basefragment" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#fff" > <include layout="@layout/actionbar_home"/> <include layout="@layout/tab_fragments_title"/> <FrameLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/frame_four_containers_ID" ></FrameLayout> </LinearLayout>
报错信息:
![](http://images0.cnblogs.com/blog/555442/201410/231600103713198.jpg)
============解决方案1============
说你没有绑定showMenuBtn的ID
============解决方案2============
明显 showMenuBtn 是null 的;
showMenuBtn 这个控件 定义在了 Fragment 中的吧, 在 Activity 中使用 findViewById 是获取不到 Fragment 中的组件的 ;
需要在 Fragment 对应的 onCreateView 方法, 使用 inflat 加载 rootView 布局后 使用 rootView,findViewById() 组件