Android Studio第6期-横GridView

23756 ワード

コードはすでに整理されていて、効果は下図のようです.
    
    
まず、RecyclerViewGridViewHorizontalFragment.java
    
    

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.GridView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.haiersmart.smartfridgefirst.R;
import com.haiersmart.smartfridgefirst.constant.ConstantUtil;
import com.haiersmart.smartfridgefirst.domain.FragmentResult;
import com.haiersmart.smartfridgefirst.domain.ListViewLabOne;
import com.haiersmart.smartfridgefirst.domain.ListViewLabOne2;
import com.haiersmart.smartfridgefirst.domain.NetMessage;
import com.haiersmart.smartfridgefirst.domain.ShouyeLeft1Model;
import com.haiersmart.smartfridgefirst.domain.ShouyeLeft1ModelNew;
import com.haiersmart.smartfridgefirst.ui.adapter.MyViewPagerAdapterDemo;
import com.haiersmart.smartfridgefirst.ui.adapter.ShouyeLeft1AdapterDemo;
import com.haiersmart.smartfridgefirst.ui.base.BaseNetWorkFragment;
import com.haiersmart.smartfridgefirst.util.MyLogUtil;
import com.haiersmart.smartfridgefirst.util.ToastUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * @function:
 * @description:
 * @history: 1. Date:2015/12/26 20:27
 * Author:jack_D
 * modification:
 */
public class RecyclerViewGridViewHorizontalFragment extends BaseNetWorkFragment {

    private TextView tv, tvback;
    private Button test_net_button;

    //MainPager View One       
    private int pagerFlag;
    //TODO geek
    private TextView tv_Hello;//   title
    private RelativeLayout rl_Viewpager_LeftSlip;//  
    private RelativeLayout rl_add_button;//  
    private RelativeLayout rl_del_button;//  
    private RelativeLayout rl_Viewpager_RightSlip;//  
    private static final float APP_PAGE_SIZE = 8.0f;
    private MyViewPagerAdapterDemo adapter;
    private ShouyeLeft1AdapterDemo adapter2;
    private ArrayList<GridView> array;
    private ViewPager viewPager;
    private int exPos = 0;

    //   
    // get all apps
    private int pageCount2 = 5;//      
    private List<ShouyeLeft1Model> apps12 = ListViewLabOne.getmInstance().getmParent_model();//16
    private List<ShouyeLeft1Model> apps3 = ListViewLabOne2.getmInstance().getmParent_model2();//8

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyLogUtil.i(TAG, "-----onCreate()");
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        MyLogUtil.i(TAG, "-----onCreateView()");
        this.inflater = inflater;
        setContentView(R.layout.activity_recyclerview, container);
//        baseView = inflater.inflate(R.layout.activity_test_net, container, false);
        findviews();
        addlisteners();
        requestViewOne();
        if (getArguments() != null) {
            tv.setText(getArguments().getString(ConstantUtil.Bundle_INFO1));

        } else {
            tv.setText("null");
        }


        return baseView;
    }

    private void findviews() {
        test_net_button = (Button) findViewById(R.id.test_net_button);
        tv = (TextView) findViewById(R.id.test_net_tv);
        tvback = (TextView) findViewById(R.id.test_back_button);

        viewPager = (ViewPager) baseView.findViewById(R.id.viewpager_view_111);
        rl_Viewpager_LeftSlip = (RelativeLayout) baseView.findViewById(R.id.rl_Viewpager_LeftSlip);
        rl_Viewpager_RightSlip = (RelativeLayout) baseView.findViewById(R.id.rl_Viewpager_RightSlip);

        adapter2 = new ShouyeLeft1AdapterDemo(mContext);
    }

    private void addlisteners() {
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle = new Bundle();
                bundle.putString(ConstantUtil.Bundle_INFO1, "back Str");
                setResult(ConstantUtil.ResultCodeO1, bundle);
                backTo(OneFragment.class);
            }
        });
        test_net_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle = new Bundle();
                bundle.putString(ConstantUtil.Bundle_INFO1, "str 2 to 3");
                startFragmentForResult(RecyclerViewGridViewHorizontalFragment.this, TestThreeFragment.class, bundle, ConstantUtil.RequestCodeO1, ConstantUtil.TAB_01);
            }
        });
        tvback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                back();
            }
        });
        setViewPagerOneListener();
    }

    @Override
    public void onFragmentResult(FragmentResult result) {
        super.onFragmentResult(result);
        tv.setText(result.toString());
    }

    @Override
    protected void networkCallBack(NetMessage message) {

    }

    @Override
    public void onStart() {
        MyLogUtil.i(TAG, "-----onStart()");
        super.onStart();
    }

    @Override
    public void onDetach() {
        MyLogUtil.i(TAG, "-----onDetach()");
        super.onDetach();
    }

    @Override
    public void onHiddenChanged(boolean hidden) {
        MyLogUtil.i(TAG, "-----onHiddenChanged()");
        super.onHiddenChanged(hidden);
    }

    @Override
    public void onResume() {
        MyLogUtil.i(TAG, "-----onResume()");
        super.onResume();
    }

    @Override
    public void onPause() {
        MyLogUtil.i(TAG, "-----onPause()");
        super.onPause();
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        MyLogUtil.i(TAG, "-----onActivityCreated()");
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onStop() {
        MyLogUtil.i(TAG, "-----onStop()");
        super.onStop();
    }

    @Override
    public void onDestroy() {
        MyLogUtil.i(TAG, "-----onDestroy()");
        super.onDestroy();
    }

    @Override
    public void onDestroyView() {
        MyLogUtil.i(TAG, "-----onDestroyView()");
        super.onDestroyView();
    }

    @Override
    public void onAttach(Context context) {
        MyLogUtil.i(TAG, "-----onAttach()");
        super.onAttach(context);
    }

    /**
     * ShouYeLeft1    
     */
    private void requestViewOne() {
        adapter = new MyViewPagerAdapterDemo(mContext);
        viewPager.setAdapter(adapter);

        // the total pages
        final int PageCount = (int) Math.ceil(apps12.size() / APP_PAGE_SIZE);
        array = new ArrayList<GridView>();

        for (int i = 0; i < PageCount; i++) {
            GridView appPage = new GridView(mContext);
            ShouyeLeft1AdapterDemo adapter2 = new ShouyeLeft1AdapterDemo(mContext);
            if (i == 0) {
                List<ShouyeLeft1Model> apps1 = apps12.subList(0, 8);
                adapter2.setContacts(apps1, i);
                appPage.setAdapter(adapter2);
                appPage.setNumColumns(4);
                array.add(appPage);
            }
            if (i == 1) {
                List<ShouyeLeft1Model> apps2 = apps12.subList(8, apps12.size());
                adapter2.setContacts(apps2, i);
                appPage.setAdapter(adapter2);
                appPage.setNumColumns(4);
                array.add(appPage);
            }

        }
        MyLogUtil.e("----array-------", array.size() + "");
        adapter.setContacts(array);
        adapter.notifyDataSetChanged();

    }

    private void updateViewpager(int position, List<ShouyeLeft1Model> apps3) {
        int PageCount = (int) Math.ceil(apps3.size() / APP_PAGE_SIZE);
        if (position >= 1 && position < pageCount2 - 1) {
            GridView appPage = new GridView(mContext);
            adapter2.setContacts2(apps3, position + 1);
            adapter2.notifyDataSetChanged();
            appPage.setAdapter(adapter2);
            appPage.setNumColumns(4);
            adapter.addConstacts(appPage);
            adapter.notifyDataSetChanged();
            ToastUtil.showToastLong(position + "");
        } else {
//            ToastUtil.showToastLong(position + "," + "     ");
        }
    }

    /**
     *  viewPager   , popwindow dismiss
     */
    private void setViewPagerOneListener() {
        if (null != viewPager) {
            viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//                    ToastUtil.showToastLong(position+"");
                }

                @Override
                public void onPageSelected(int position) {
                    if (position > 0) {
                        rl_Viewpager_LeftSlip.setVisibility(View.VISIBLE);
                    } else {
                        rl_Viewpager_LeftSlip.setVisibility(View.INVISIBLE);
                    }
                    if (position < (pagerFlag - 1)) {
                        rl_Viewpager_RightSlip.setVisibility(View.VISIBLE);
                    } else {
                        rl_Viewpager_RightSlip.setVisibility(View.INVISIBLE);
                    }
                    if (position > exPos) {
                        exPos = position;
                        updateViewpager(position,apps3);
                    } else {
//                        ToastUtil.showToastLong("     ");
                    }
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });
        }
        rl_Viewpager_LeftSlip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
            }
        });
        rl_Viewpager_RightSlip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
            }
        });
    }
}

そしてMyViewPagerAdapterDemo:
    
    package com.haiersmart.smartfridgefirst.ui.adapter;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.GridView;

import com.haiersmart.smartfridgefirst.util.MyLogUtil;

import java.util.List;

/**
 *   ViewPager        
 *
 * @author Administrator
 */
public class MyViewPagerAdapterDemo extends PagerAdapter {
    private List<GridView> array;
    private Context context;
    /**
     *      (new)   
     *
     * @param context    
     * @param array          
     */
    public MyViewPagerAdapterDemo(Context context ) {
        this.context =context;
    }
    public void setContacts(List<GridView> array) {
        this.array = array;

    }
    public void addConstacts(List<GridView> array) {
        this.array.addAll(array);
    }
    public void addConstacts(GridView gridView) {
        this.array.add(gridView);
        MyLogUtil.e("-----arraysssssss------",array.size()+"");
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        if (array == null)
            return 0;
        return array.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0 == arg1;
    }

    @Override
    public Object instantiateItem(View arg0, int arg1) {
        ((ViewPager) arg0).addView(array.get(arg1));
        return array.get(arg1);
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);
    }

}

もう一つShouyeLeft 1 AdapterDemo:
    
    package com.haiersmart.smartfridgefirst.ui.adapter;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;

import com.haiersmart.smartfridgefirst.R;
import com.haiersmart.smartfridgefirst.constant.FridgeApplication;
import com.haiersmart.smartfridgefirst.domain.ShouyeLeft1Model;
import com.haiersmart.smartfridgefirst.util.MyLogUtil;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class ShouyeLeft1AdapterDemo extends BaseAdapter {

    protected LayoutInflater inflater;
    protected Context context;
    private List<ShouyeLeft1Model> mratings;
    public static final int APP_PAGE_SIZE = 8;//          

    public PopupWindow pop;
    private View view;
    TextView fresh;
    TextView expirationDate;

    public Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            if (null != pop && pop.isShowing()) {
                pop.dismiss();
            }
        }

        ;
    };

    public PopupWindow getPopupWindow() {
        return pop;
    }

    public Handler getHandler() {
        return handler;
    }

    public ShouyeLeft1AdapterDemo(Context context) {
        this.context = context;
        inflater = LayoutInflater.from(context);
        mratings = new ArrayList<ShouyeLeft1Model>();
        initPopupWindow();
    }

    private void initPopupWindow() {
        view = inflater.inflate(R.layout.mainpager_tip, null);
        pop = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        fresh = (TextView) view.findViewById(R.id.tv_Fresh);
        expirationDate = (TextView) view.findViewById(R.id.tv_ExpirationDate);
        pop.setOutsideTouchable(true);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pop.dismiss();
            }
        });
    }

    public void setContacts(List<ShouyeLeft1Model> ratings, int page) {
        this.mratings = ratings;
        //            ,     16 
//        mratings.addAll(ratings);
//        int i = page * APP_PAGE_SIZE;//        
//        int iEnd = i + APP_PAGE_SIZE;//         
//        while ((i < ratings.size()) && (i < iEnd)) {
//            mratings.add(ratings.get(i));
//            i++;
//        }
        MyLogUtil.e("------mratings-------", mratings.size() + "");

    }

    public void setContacts2(List<ShouyeLeft1Model> ratings, int page) {
        mratings = new ArrayList<ShouyeLeft1Model>();
        this.mratings = ratings;
        //            ,     16 
//        int i = page * APP_PAGE_SIZE;//        
//        int iEnd = i + APP_PAGE_SIZE;//         
////        while ((i < ratings.size()) && (i < iEnd)) {
//        MyLogUtil.e("------mratings22222-------", mratings.size() + "");
//        mratings.addAll(i, ratings);
//            mratings.add(ratings.get(i));
//            i++;
//        }

//        for (int i = 0; i < APP_PAGE_SIZE; i++) {
//            mratings.add(ratings.get(i));
//        }
    }

    public void addConstacts(List<ShouyeLeft1Model> ratings, int page) {
        this.mratings.addAll(ratings);
    }

    public List<ShouyeLeft1Model> getMratings() {
        return mratings;
    }

    @Override
    public int getCount() {
        return mratings.size();
    }

    @Override
    public Object getItem(int position) {
        return mratings.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    private class ViewHolder {
        private ImageView ivAppIcon;
        private TextView tvAppName;//

    }

    @SuppressLint("InflateParams")
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = null;
        final ShouyeLeft1Model ratings = mratings.get(position);
        if (convertView == null) {
            convertView = inflater.inflate(
                    R.layout.app_item, null);
            viewHolder = new ViewHolder();
            viewHolder.ivAppIcon = (ImageView) convertView
                    .findViewById(R.id.ivAppIcon);
            viewHolder.tvAppName = (TextView) convertView.findViewById(R.id.tvAppName);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        try {
            FridgeApplication.getImageLoader().displayImage(ratings.getImgUrl(), viewHolder.ivAppIcon, FridgeApplication.getLoaderOptionsFace22());
        } catch (IOException e) {
            e.printStackTrace();
        }
        viewHolder.tvAppName.setText(ratings.getTitle());
        viewHolder.ivAppIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                //    
//                Intent intent = new Intent(context, AddressEditActivityBase.class);
//                intent.putExtra(ConstantUtil.INTENT_FROM,
//                        AddressActivityBase.TAG);
//                intent.putExtra(ConstantUtil.INTENT_INFO1, ratings);
//                context.startActivity(intent);
//                if (null != ratings && position < mratings.size()) {
//                    showpop(v, ratings.getId(), ratings.getId());
////                    mFragment.requestCookBookListFromFoodID(list.get(position).getFood_definition_id());
//                } else {
//                    showpop(v);
//                }
            }
        });


        return convertView;
    }

    private void showpop(View v, int arg1, int arg2) {
        fresh.setText((context.getString(R.string.fresh) + arg1) + "%");
        expirationDate.setText((context.getString(R.string.expiration_date)) + arg2 + " ");
        if (pop.isShowing()) {
            handler.removeCallbacksAndMessages(null);
            pop.dismiss();
            showpop(v, arg1, arg2);
        } else {
            int offx = ((int) context.getResources().getDimension(R.dimen.x150) - 110) / 2;
            int offy = -(int) (70 + context.getResources().getDimension(R.dimen.y150));
            pop.showAsDropDown(v, offx, offy);
            handler.sendEmptyMessageDelayed(0, 2000);
        }
    }

    private void showpop(View v) {
        fresh.setText("  :");
        expirationDate.setText("      ");
        if (pop.isShowing()) {
            handler.removeCallbacksAndMessages(null);
            pop.dismiss();
            showpop(v);
        } else {
            int offx = ((int) context.getResources().getDimension(R.dimen.x150) - 110) / 2;
            int offy = -(int) (70 + context.getResources().getDimension(R.dimen.y150));
            pop.showAsDropDown(v, offx, offy);
            handler.sendEmptyMessageDelayed(0, 2000);
        }
    }

}

ダミーデータのModel:
    
    package com.haiersmart.smartfridgefirst.domain;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by geek on 2016/2/26.
 */
public class ListViewLabOne {
    //    /**
//     *
//     */
//    private static final long serialVersionUID = 1L;
    public static ListViewLabOne mInstance;

    private List<ShouyeLeft1Model> mParent_model = new ArrayList<ShouyeLeft1Model>();

    private ListViewLabOne() {
        mParent_model.add(new ShouyeLeft1Model(1, "    1", "    1",1,false));
        mParent_model.add(new ShouyeLeft1Model(2, "    2", "    2",1,false));
        mParent_model.add(new ShouyeLeft1Model(3, "    3", "    3",1,false));
        mParent_model.add(new ShouyeLeft1Model(4, "    4", "    4",1,false));
        mParent_model.add(new ShouyeLeft1Model(5, "    5", "    5",1,false));
        mParent_model.add(new ShouyeLeft1Model(6, "   6", "   6",1,false));
        mParent_model.add(new ShouyeLeft1Model(7, "    7", "    7",1,false));
        mParent_model.add(new ShouyeLeft1Model(8, "  8", "  8",1,false));
        mParent_model.add(new ShouyeLeft1Model(1, "    9", "    9",1,false));
        mParent_model.add(new ShouyeLeft1Model(2, "    10", "    10",1,false));
        mParent_model.add(new ShouyeLeft1Model(3, "    11", "    11",1,false));
        mParent_model.add(new ShouyeLeft1Model(4, "    12", "    12",1,false));
        mParent_model.add(new ShouyeLeft1Model(5, "    13", "    13",1,false));
        mParent_model.add(new ShouyeLeft1Model(6, "   14", "   14",1,false));
        mParent_model.add(new ShouyeLeft1Model(7, "    15", "    15",1,false));
        mParent_model.add(new ShouyeLeft1Model(8, "  16", "  16",1,false));
    }

    public List<ShouyeLeft1Model> getmParent_model() {
        return mParent_model;
    }

    public static ListViewLabOne getmInstance() {
        if (mInstance == null) {
            synchronized (ListViewLabOne.class) {
                if (mInstance == null) {
                    mInstance = new ListViewLabOne();
                }
            }
        }
        return mInstance;
    }
}

もう一つのモデル:
    
    package com.haiersmart.smartfridgefirst.domain;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by geek on 2016/2/26.
 */
public class ListViewLabOne2 {
    //    /**
//     *
//     */
//    private static final long serialVersionUID = 1L;
    public static ListViewLabOne2 mInstance;

    private List<ShouyeLeft1Model> mParent_model = new ArrayList<ShouyeLeft1Model>();

    private ListViewLabOne2() {
        mParent_model.add(new ShouyeLeft1Model(1, "    1", "    1", 1, false));
        mParent_model.add(new ShouyeLeft1Model(2, "    2", "    2", 1, false));
        mParent_model.add(new ShouyeLeft1Model(3, "    3", "    3", 1, false));
        mParent_model.add(new ShouyeLeft1Model(4, "    4", "    4", 1, false));
        mParent_model.add(new ShouyeLeft1Model(5, "    5", "    5", 1, false));
        mParent_model.add(new ShouyeLeft1Model(6, "   6", "   6", 1, false));
        mParent_model.add(new ShouyeLeft1Model(7, "    7", "    7", 1, false));
        mParent_model.add(new ShouyeLeft1Model(8, "  8", "  8", 1, false));

    }

    public List<ShouyeLeft1Model> getmParent_model2() {
        return mParent_model;
    }
    public static ListViewLabOne2 getmInstance() {
        if (mInstance == null) {
            synchronized (ListViewLabOne2.class) {
                if (mInstance == null) {
                    mInstance = new ListViewLabOne2();
                }
            }
        }
        return mInstance;
    }
}

ダイエット~フィットネス~旅行~