类似于actionBar也是在导航栏里用但是他使用的是menu菜单设置菜单项的AsAction=“always|withText”
本例使用LoaderCallbacks<Cursor>接口回调
使用菜单项
1 import java.io.File; 2 import java.io.UnsupportedEncodingException; 3 import java.net.URLEncoder; 4 5 import android.app.ActionBar; 6 import android.app.ActionBar.Tab; 7 import android.app.ActionBar.TabListener; 8 import android.app.Activity; 9 import android.app.FragmentTransaction; 10 import android.content.Intent; 11 import android.net.Uri; 12 import android.os.Bundle; 13 import android.util.Log; 14 import android.view.Menu; 15 import android.view.MenuItem; 16 17 /** 18 * 使用ActionBar的Tab导航 19 * 1)设置ActionBar的导航的模式为TABS 20 * 2)当前Activity实现ActionBar.TabListener接口(Tab的选择与取消选择等事件) 21 * 3)通过ActionBar类对象的newTab() 创建Tab选项卡,同时设置显示的标题和事件监听 22 * 4)通过ActionBAr类对象的addTab()方法,将创建的Tab增加到ActionBar中 23 * 5)在Tab选择事件方法中,动态地显示Fragment 24 * 25 * @author apple 26 * 27 */ 28 public class MainActivity extends Activity implements TabListener{ 29 30 private ActionBar actionBar; 31 @Override 32 protected void onCreate(Bundle savedInstanceState) { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_main); 35 36 initActionBar(); 37 } 38 39 private void initActionBar() { 40 // TODO 初始化ActionBar中的相关设置 41 actionBar=getActionBar();//获取ActionBar对象 42 43 //1. 设置ActionBar的导航模式: tab选项卡的导航模式 44 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 45 46 //3. 创建Tab 47 Tab tab1=actionBar.newTab() 48 .setText("头条") 49 .setIcon(android.R.drawable.ic_menu_add) 50 .setTabListener(this); 51 52 Tab tab2=actionBar.newTab() 53 .setText("军事") 54 .setIcon(android.R.drawable.ic_menu_agenda) 55 .setTabListener(this); 56 57 Tab tab3=actionBar.newTab() 58 .setText("国内") 59 .setIcon(android.R.drawable.ic_menu_delete) 60 .setTabListener(this); 61 62 Tab tab4=actionBar.newTab() 63 .setText("国际") 64 .setIcon(android.R.drawable.ic_menu_camera) 65 .setTabListener(this); 66 67 Tab tab5=actionBar.newTab() 68 .setText("体育") 69 .setIcon(android.R.drawable.ic_menu_compass) 70 .setTabListener(this); 71 72 //4. 增加Tab到ActionBar中 73 actionBar.addTab(tab1); 74 actionBar.addTab(tab2); 75 actionBar.addTab(tab3); 76 actionBar.addTab(tab4); 77 actionBar.addTab(tab5); 78 } 79 80 @Override 81 public void onTabSelected(Tab tab, FragmentTransaction ft) { 82 // TODO 选择Tab事件 83 Log.i("info", "onTabSelected-----"+tab.getPosition()); 84 85 ContentFragment cf= 86 ContentFragment.newInstace(tab.getText().toString()); 87 88 ft.replace(R.id.mainLayoutId, cf); 89 90 } 91 92 @Override 93 public void onTabUnselected(Tab tab, FragmentTransaction ft) { 94 // TODO 取消选择Tab事件 95 Log.i("info", "onTabUnselected-----"+tab.getPosition()); 96 } 97 98 @Override 99 public void onTabReselected(Tab tab, FragmentTransaction ft) { 100 // TODO 重新选择Tab事件 101 Log.i("info", "onTabReselected-----"+tab.getPosition()); 102 103 } 104 105 @Override 106 public boolean onCreateOptionsMenu(Menu menu) { 107 getMenuInflater().inflate(R.menu.main, menu); 108 return super.onCreateOptionsMenu(menu); 109 } 110 111 @Override 112 public boolean onOptionsItemSelected(MenuItem item) { 113 if(item.getItemId()==R.id.action_share){ 114 115 try { 116 String info="给您推荐一本新的学习资料:http://www.baidu.com/" 117 +URLEncoder.encode("Android5.0大全","utf-8"); 118 //说明:使用URLEncoder工具类,将url请求中包含中文的信息转化unicode编码 119 120 Intent intent=new Intent(Intent.ACTION_SEND); 121 intent.setType("text/*"); //设置分享的内容类型为文本类型 122 // File imgFile=null; 123 // intent.setDataAndType(Uri.parse(imgFile.getAbsolutePath()), "image/*"); 124 intent.putExtra(Intent.EXTRA_TEXT, info);//设置分享的内容 125 126 startActivity(intent);//开始分享 127 128 } catch (UnsupportedEncodingException e) { 129 e.printStackTrace(); 130 } 131 132 133 } 134 return super.onOptionsItemSelected(item); 135 } 136 137 }
MainActivity.java
1 import android.app.ListFragment; 2 import android.os.Bundle; 3 import android.view.View; 4 import android.widget.ArrayAdapter; 5 import android.widget.ListView; 6 7 public class ContentFragment extends ListFragment { 8 9 private String title; //传入当前Fragment中的参数 10 11 private ArrayAdapter<String> adapter; 12 13 //声明静态工厂方法 14 public static ContentFragment newInstace(String title){ 15 16 ContentFragment cf=new ContentFragment(); 17 Bundle args=new Bundle(); 18 args.putString("title",title); 19 20 cf.setArguments(args);//设置要传入Fragment中的参数 21 22 return cf; 23 } 24 25 @Override 26 public void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 29 //获取传入的参数 30 title=getArguments().getString("title"); 31 32 adapter=new ArrayAdapter<String>(getActivity().getApplicationContext(), 33 R.layout.item_content); 34 35 //初始化数据源 36 for(int i=0;i<20;i++) 37 adapter.add(title+"--"+i); 38 39 } 40 41 @Override 42 public void onActivityCreated(Bundle savedInstanceState) { 43 // TODO 归属的Activity的onCreate()初始化方法执行完成 44 super.onActivityCreated(savedInstanceState); 45 46 //设置当前Fragment中ListView控件的适配器 47 setListAdapter(adapter); 48 } 49 50 @Override 51 public void onListItemClick(ListView l, View v, int position, long id) { 52 // TODO ListView中的Item点击事件方法 53 //设置当前归属Activity的标题为点击item的内容 54 55 getActivity().setTitle(adapter.getItem(position)); 56 } 57 58 }
ContentFragment
1 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 2 3 <!-- actionViewClass 设置ActionView控件的UI类 --> 4 <item 5 android:id="@+id/action_search" 6 android:orderInCategory="100" 7 android:showAsAction="ifRoom" 8 android:actionViewClass="android.widget.SearchView" 9 android:title="检索"/> 10 11 <!-- actionLayout 属性设置自定义ActionView的布局文件 --> 12 <item 13 android:id="@+id/action_search_custom" 14 android:orderInCategory="100" 15 android:showAsAction="always|collapseActionView" 16 android:actionLayout="@layout/actionview_search" 17 android:icon="@android:drawable/ic_menu_agenda" 18 android:title="自定义检索"/> 19 20 </menu>
menu_main
注意这里使用的碎片是ListFragment他可以实现onScrollListener 重写其中的方法 不过最终还得getListView().setOnScrollListener(this); 一般是在onActivityCreated()中实现绑定
时间: 2024-11-05 16:05:26