Android学习日记(yzy):Fragment与VierPager简单实现

      在学习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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值