一共有4個fragment,分別是contact(聯系人),friends(朋友),search(查找),more(更多)。使用的都是同一個布局,每個fragment中都有四個內部按鈕,可以切換到其他的3個fragment中。
現在只考慮在contact中,實現點4個(其實有效的是3個),切換到其他3個fragment中。
現在的情況是,點擊contactfragment中的按鈕,toast會響應,但是fragment不會跳轉。這是怎么回事,下面是兩個類的代碼。
這是contactfragment。
public class ContactFragment extends Fragment implements OnClickListener { MainActivity activity = (MainActivity) getActivity(); View view = null; Button btn_inner_contact; Button btn_inner_friends; Button btn_inner_search; Button btn_inner_more; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.frag_content, container, false); TextView textview_hint = (TextView) view .findViewById(R.id.textview_hint); textview_hint.setText("Contact"); initComponent(); return view; } private void initComponent() { btn_inner_contact = (Button) view .findViewById(R.id.button_inner_contact); btn_inner_friends = (Button) view .findViewById(R.id.button_inner_friends); btn_inner_search = (Button) view.findViewById(R.id.button_inner_search); btn_inner_more = (Button) view.findViewById(R.id.button_inner_more); btn_inner_contact.setOnClickListener(this); btn_inner_friends.setOnClickListener(this); btn_inner_search.setOnClickListener(this); btn_inner_more.setOnClickListener(this); } @Override public void onClick(View v) { FragmentManager fm = activity.getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); switch (v.getId()) { case R.id.button_inner_contact: Toast.makeText(getActivity(), "點擊了內部contact按鈕", Toast.LENGTH_SHORT) .show(); if (activity.contactFragment == null) { activity.contactFragment = new ContactFragment(); } ft.replace(R.id.framelayout_content, activity.contactFragment); break; case R.id.button_inner_friends: Toast.makeText(getActivity(), "點擊了內部friends按鈕", Toast.LENGTH_SHORT) if (activity.friendsFragment == null) { activity.friendsFragment = new FriendsFragment(); } ft.replace(R.id.framelayout_content, activity.friendsFragment); break; case R.id.button_inner_more: if (activity.moreFragment == null) { activity.moreFragment = new MoreFragment(); } ft.replace(R.id.framelayout_content, activity.moreFragment); break; case R.id.button_inner_search: if (activity.searchFragment == null) { activity.searchFragment = new SearchFragment(); } ft.replace(R.id.framelayout_content, activity.searchFragment); break; default: break; } ft.commit(); } }
這是mainactivity類,mainactivity中的那四個按鈕及其響應時間是fragment外部的四個按鈕,與內部的inner按鈕沒關系
public class MainActivity extends Activity implements OnClickListener { public ContactFragment contactFragment; public FriendsFragment friendsFragment; public MoreFragment moreFragment; public SearchFragment searchFragment; private Button btn_contact; private Button btn_friends; private Button btn_search; private Button btn_more; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initcomponet(); initview(); } private void initview() { contactFragment = new ContactFragment(); FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.framelayout_content, contactFragment); ft.commit(); } private void initcomponet() { btn_contact = (Button) findViewById(R.id.button_contact); btn_friends = (Button) findViewById(R.id.button_friends); btn_more = (Button) findViewById(R.id.button_more); btn_search = (Button) findViewById(R.id.button_search); btn_contact.setOnClickListener(this); btn_friends.setOnClickListener(this); btn_more.setOnClickListener(this); btn_search.setOnClickListener(this); } @Override public void onClick(View v) { FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); switch (v.getId()) { case R.id.button_contact: if (contactFragment == null) { contactFragment = new ContactFragment(); } ft.replace(R.id.framelayout_content, contactFragment); break; case R.id.button_friends: if (friendsFragment == null) { friendsFragment = new FriendsFragment(); } ft.replace(R.id.framelayout_content, friendsFragment); break; case R.id.button_more: if (moreFragment == null) { moreFragment = new MoreFragment(); } ft.replace(R.id.framelayout_content, moreFragment); break; case R.id.button_search: if (searchFragment == null) { searchFragment = new SearchFragment(); } ft.replace(R.id.framelayout_content, searchFragment); break; default: break; } ft.commit(); } }
我試了一下,把MainActivity activity=(MainActivity)getActivity();這行代碼放到onclick方法了,就可以了!