效果图如下:


android下使用Fragment实现左侧3级菜单+动画效果_第1张图片


点击每层的item 弹出下一层


核心代码如下:


MainActivity

package com.hsx.view;import com.hsx.fragment.R;import com.hsx.fragments.FirstFragment;import com.hsx.fragments.FirstFragment.FirstFragmentSelectedListener;import com.hsx.fragments.SecondFragment;import com.hsx.fragments.SecondFragment.SecondFragmentListener;import com.hsx.fragments.ThreeFragment;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentTransaction;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends FragmentActivity implements FirstFragmentSelectedListener, SecondFragmentListener {Button returnBtn;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);ThreeFragment three = (ThreeFragment) getSupportFragmentManager().findFragmentById(R.id.three_fragment);FragmentTransaction ft = getSupportFragmentManager().beginTransaction();        ft.hide(three);        ft.commit();returnBtn = (Button) findViewById(R.id.returnBtn);returnBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {FirstFragment first = (FirstFragment) getSupportFragmentManager().findFragmentById(R.id.first_fragment);ThreeFragment three = (ThreeFragment) getSupportFragmentManager().findFragmentById(R.id.three_fragment);FragmentTransaction ft = getSupportFragmentManager().beginTransaction();ft.setCustomAnimations(R.anim.push_n50_0, R.anim.push_0_50);    ft.hide(three);ft.show(first);ft.commit();}});}public void onFirstSelectedData(String[] data) {SecondFragment second = (SecondFragment) getSupportFragmentManager().findFragmentById(R.id.second_fragment);if (second != null) {second.updateView(data);}}@Overridepublic void onSecondSelectedData(String[] data) {FirstFragment first = (FirstFragment) getSupportFragmentManager().findFragmentById(R.id.first_fragment);ThreeFragment three = (ThreeFragment) getSupportFragmentManager().findFragmentById(R.id.three_fragment);FragmentTransaction ft = getSupportFragmentManager().beginTransaction();ft.setCustomAnimations(R.anim.push_50_0, R.anim.push_0_n50);ft.show(three);ft.hide(first);ft.commit();if (three != null) {three.updateView(data);}}}


FirstFragment

package com.hsx.fragments;import com.hsx.constant.Ipsum;import com.hsx.fragment.R;import android.app.Activity;import android.os.Build;import android.os.Bundle;import android.support.v4.app.ListFragment;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;public class FirstFragment extends ListFragment {FirstFragmentSelectedListener mCallback;public interface FirstFragmentSelectedListener {public void onFirstSelectedData(String[] data);}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1: android.R.layout.simple_list_item_1;setListAdapter(new ArrayAdapter<String>(getActivity(), layout, Ipsum.FirstLayer));}@Overridepublic void onStart() {super.onStart();if (getFragmentManager().findFragmentById(R.id.first_fragment) != null) {getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);}getListView().setItemChecked(0, true);}@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);try {mCallback = (FirstFragmentSelectedListener) activity;} catch (ClassCastException e) {throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener");}}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {String[] data;switch (position) {case 0:data = Ipsum.FirstSun;break;default:data = Ipsum.SecondSun;break;}mCallback.onFirstSelectedData(data);getListView().setItemChecked(position, true);}}


SecondFragment


package com.hsx.fragments;import com.hsx.constant.Ipsum;import com.hsx.fragment.R;import android.app.Activity;import android.os.Build;import android.os.Bundle;import android.support.v4.app.ListFragment;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;public class SecondFragment extends ListFragment {SecondFragmentListener mCallback;public interface SecondFragmentListener {public void onSecondSelectedData(String[] data);}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1: android.R.layout.simple_list_item_1;setListAdapter(new ArrayAdapter<String>(getActivity(), layout, Ipsum.FirstSun));}@Overridepublic void onStart() {super.onStart();if (getFragmentManager().findFragmentById(R.id.second_fragment) != null) {getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);}getListView().setItemChecked(0, true);}@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);try {mCallback = (SecondFragmentListener) activity;} catch (ClassCastException e) {throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener");}}public void updateView(String[] data) {int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1: android.R.layout.simple_list_item_1;setListAdapter(new ArrayAdapter<String>(getActivity(), layout, data));}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {String[] data;switch (position) {case 0:data = Ipsum.SecondSun;break;default:data = Ipsum.SecondSun;break;}mCallback.onSecondSelectedData(data);getListView().setItemChecked(position, true);}}


ThreeFragment


package com.hsx.fragments;import com.hsx.constant.Ipsum;import com.hsx.fragment.R;import android.app.Activity;import android.os.Build;import android.os.Bundle;import android.support.v4.app.ListFragment;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class ThreeFragment extends ListFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1: android.R.layout.simple_list_item_1;setListAdapter(new ArrayAdapter<String>(getActivity(), layout, Ipsum.FirstSun));}@Overridepublic void onStart() {super.onStart();if (getFragmentManager().findFragmentById(R.id.second_fragment) != null) {getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);}getListView().setItemChecked(0, true);}@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);}public void updateView(String[] data) {int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1: android.R.layout.simple_list_item_1;setListAdapter(new ArrayAdapter<String>(getActivity(), layout, data));}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {Toast.makeText(getActivity(), "你点了第" + position + "项", Toast.LENGTH_SHORT).show();getListView().setItemChecked(position, true);}}


Ipsum

package com.hsx.constant;public class Ipsum {public static String[] FirstLayer = {"第一层", "银联业务", "银联文化" };public static String[] FirstSun = { "第二层","培训交流", "人才培训", "互联网支付" };public static String[] SecondSun = { "第三层","ic卡业务", "移动支付" };}



源码地址如下:http://download.csdn.net/detail/abc13939746593/6613869




更多相关文章

  1. java Android 算一定业务规定的工作日(除去法定节假日、调休周末
  2. Android 深入研究SQLite实例(一) 之 业务类 sqlite版本管理类
  3. Android 数据业务框架分析
  4. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  5. Android Studio 第六十四期 - Android业务组件化之URL Scheme使
  6. Android Studio 第六十五期 - Android业务组件库
  7. Android之系统自带的文字外观设置及实际显示效果图 android:text
  8. Android外派(安卓外派) — 长年提供安卓开发工程师外派业务(可签合

随机推荐

  1. Android(安卓)检测内存泄漏工具
  2. Android访问远程网页取回json数据
  3. android录音机的一些问题整理
  4. Android(安卓)DropboxManager介绍
  5. Android中listview 大小因分辨率而异
  6. The Storage Situation: Removable Stora
  7. windows 使用QUME跑Android系统
  8. android SDK开发 -- TitleBar封装(二)
  9. Android(安卓)Studio项目报错:Caused by:
  10. Linux中遍历目录