在学习android launcher过程的基础部分,因此,在实现滑动页面时,也将应用显示给gridview布局,实现其调用功能,动态添加Viewpager的页面在实现长按功能的时候实现,现在的首要问题是,一:如何将List<Resolveinfo>的数据源的数据给予到多个不同的Fragemnt中的gridview,现在用的是笨办法,设置闸值,但是不实用。二,将应用长按换位置后的记录存储问题。
一:mainFests中设置 点击Home键后调用的launcher。
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
二:MainActivity
public class MainActivity extends FragmentActivity { private ViewPager viewPager; private List<Fragment> fragmentList; private MyFragmentAdapter myFragmentAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_main); init(); viewPager.setAdapter(myFragmentAdapter); } public void init(){ //初始化Fragment并添加到Fragment序列 fragmentList =new ArrayList<Fragment>(); viewPager = (ViewPager)findViewById(R.id.viewPager); fragmentList.add(new Fragment_first()); fragmentList.add(new Fragment_next()); myFragmentAdapter = new MyFragmentAdapter(this.getSupportFragmentManager(),fragmentList); } }二Fragment的适配器。
public class MyFragmentAdapter extends FragmentPagerAdapter { List<Fragment> fragmentList = new ArrayList<Fragment>(); public MyFragmentAdapter(FragmentManager fragmentManager, List<Fragment> fragments){ super(fragmentManager); fragmentList = fragments; } public Fragment getItem(int position){ return fragmentList.get(position); } public int getCount(){ return fragmentList.size(); } }三:两个Fragment
public class Fragment_first extends Fragment { private GridView gridView_MainDesk; private List<ResolveInfo> apps; private final static int fragmentPageCount =0;//判断pagerview的页数 private View Fragment_view; private ResolveInfo info; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ super.onCreateView(inflater,container,savedInstanceState); Fragment_view = inflater.inflate(R.layout.view_fragment_first,null); gridView_MainDesk =(GridView)Fragment_view.findViewById(R.id.gridView_MainUI); loadApps();//加载所有应用 shortClick();/* 通过Compotent点击调用应用程序*/ return Fragment_view; } private void loadApps() { Intent MainIntent = new Intent(Intent.ACTION_MAIN, null); MainIntent.addCategory(Intent.CATEGORY_LAUNCHER); apps = getActivity().getPackageManager().queryIntentActivities(MainIntent, 0); Collections.sort(apps, new ResolveInfo.DisplayNameComparator(getActivity().getPackageManager()));//应用按时间排序 gridView_MainDesk.setAdapter(new MyAdapter(getActivity(),apps,fragmentPageCount)); } private void shortClick(){ gridView_MainDesk.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { ResolveInfo info = apps.get(position); String packageName = info.activityInfo.packageName; String infoName= info.activityInfo.name; ComponentName componentName = new ComponentName(packageName,infoName); Intent intent = new Intent(); intent.setComponent(componentName); startActivity(intent); } }); } }
public class Fragment_next extends Fragment { private GridView gridView_MainDesk; private List<ResolveInfo> apps; private final static int fragmentPageCount =1; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ super.onCreateView(inflater,container,savedInstanceState); View Fragment_view = inflater.inflate(R.layout.view_fragment_next,null); gridView_MainDesk =(GridView)Fragment_view.findViewById(R.id.gridView_MainUI); loadApps(); gridView_MainDesk.setAdapter(new MyAdapter(getActivity(),apps,fragmentPageCount)); shortClick(); return Fragment_view; } private void loadApps(){ Intent MainIntent = new Intent(Intent.ACTION_MAIN,null); MainIntent.addCategory(Intent.CATEGORY_LAUNCHER); apps = getActivity().getPackageManager().queryIntentActivities(MainIntent,0); Collections.sort(apps , new ResolveInfo.DisplayNameComparator(getActivity().getPackageManager())); } private void shortClick(){ gridView_MainDesk.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { /* 通过Compotent点击调用应用程序*/ ResolveInfo info = apps.get(position); String packageName = info.activityInfo.packageName; String infoName = info.activityInfo.name; ComponentName componentName = new ComponentName(packageName,infoName); Intent intent = new Intent(); intent.setComponent(componentName); startActivity(intent); } }); } }四:PageView的是适配器
public class MyAdapter extends BaseAdapter { Context context; List<ResolveInfo> apps; ResolveInfo info; int fragmentPageCount; int appCount; public MyAdapter(Context context, List<ResolveInfo> apps,int fragmentPageCount) { super(); this.context = context; this.apps = apps; this.fragmentPageCount = fragmentPageCount; } public int getCount() { return getAppCount(); } @Override public Object getItem(int position) { return apps.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { HolderView holderView; if (convertView == null){ holderView = new HolderView(); convertView = LayoutInflater.from(context).inflate(R.layout.view_gridview_item,null); holderView.IV_gridView_item = (ImageView)convertView.findViewById(R.id.IV_gridView_item); holderView.TV_gridView_item = (TextView)convertView.findViewById(R.id.TV_gridView_item); convertView.setTag(holderView); }else { holderView =(HolderView) convertView.getTag(); } if (fragmentPageCount == 0) { if (position <= 16) { info = apps.get(position); holderView.IV_gridView_item.setBackground(info.loadIcon(context.getPackageManager())); holderView.TV_gridView_item.setText(info.loadLabel(context.getPackageManager()).toString()); } }else if(fragmentPageCount > 0) { position = position+16; info = apps.get(position); holderView.IV_gridView_item.setBackground(info.loadIcon(context.getPackageManager())); holderView.TV_gridView_item.setText(info.loadLabel(context.getPackageManager()).toString()); } return convertView; } static class HolderView{ public TextView TV_gridView_item; public ImageView IV_gridView_item; } private int getAppCount(){ if(fragmentPageCount == 0){ if (apps.size() <= 16){ appCount = apps.size(); }else { appCount = 16; } }else{ if(apps.size() <= 16 + fragmentPageCount*24 ){ appCount = apps.size() - 16 -(fragmentPageCount-1)*24; } else { appCount = 16 + fragmentPageCount*24; } } return appCount; } }