2014年8月8日 星期五

萬用Adapter

兩隻CLASS CouponsAdapter 和CouponsDetailActivity
//實作在NEW這個adapter上CouponsDetailActivity的
CouponsAdapter .init(new ListAdapterCallbacks() {

/*
 *
 */
// TODO: Auto-generated Javadoc
/**
 * The Class CouponsAdapter.
 */
public class CouponsAdapter extends BaseAdapter {

    /** The inflater. */
    private static LayoutInflater inflater = null;

    /** The m context. */
    private Context mContext;

    /** The m callback. */
    private ListAdapterCallbacks mCallback;

    /** The m j array. */
    private JSONArray mJArray;

    private String mName;

    private String mDisplayImage;
    ArrayList<CouponsWrapper> couponsTicketAryList=null;//MemberFragment

    /**
     * Instantiates a new coupons adapter.
     *
     * @param context
     *            the context
     * @param jArray
     *            the j array
     */
    public CouponsAdapter(Context context, JSONArray jArray) {
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mContext = context;
        mJArray = jArray;

    }

    public CouponsAdapter(Context context) {
        mContext = context;
    }
   
    public CouponsAdapter(Context context,ArrayList<CouponsWrapper> couponsTicketAryList) {//MemberFragment 目前無作用
        mContext = context;
        this.couponsTicketAryList=couponsTicketAryList;
        Log.d("TAG CouponsAdapter() ","couponsTicketAryList");
    }

    public void setArray(JSONArray jArray) {
        this.mJArray = jArray;

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                String imageUrl = JsonUtils.URL + mDisplayImage;
                new DownloadFileFromURL().execute(imageUrl, mName);

            }
        });
        thread.start();

    }

    /*
     * (non-Javadoc)
     *
     * @see android.widget.Adapter#getCount()
     */
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        if (mJArray != null) {
            return mJArray.length();
        } else {
            return 0;
        }

    }

    /*
     * (non-Javadoc)
     *
     * @see android.widget.Adapter#getItem(int)
     */
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    /*
     * (non-Javadoc)
     *
     * @see android.widget.Adapter#getItemId(int)
     */
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    /**
     * The Class ViewHolder.
     */
    public static class ViewHolder {

        /** The nearby icon. */
        public ImageView nearbyIcon;

        /** The nearby title. */
        public TextView nearbyTitle;
       
    }
    ViewHolder holder;
    /*
     * (non-Javadoc)
     *
     * @see android.widget.Adapter#getView(int, android.view.View,
     * android.view.ViewGroup)
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View vi = convertView;
        if (convertView == null) {
            //Log.d("TAG getView","mFavoriteCouponsAdapter");//MemberFragment
            vi = inflater.inflate(R.layout.couponsadapter, null);
            holder = new ViewHolder();
            holder.nearbyIcon = (ImageView) vi.findViewById(R.id.icon);
            holder.nearbyTitle = (TextView) vi.findViewById(R.id.textView1);

            vi.setTag(holder);
        } else {
            holder = (ViewHolder) vi.getTag();
        }
       
        if(couponsTicketAryList==null){
            //Log.d("TAG getView if","couponsTicketAryList==null");
            setCouponsAdapter(position);
           
           
        }else{
           
        CouponsWrapper favoriteWrapper = couponsTicketAryList.get(position);
        Log.d("TAG getView else",favoriteWrapper.TITLE);//MemberFragment
            holder.nearbyTitle.setText(favoriteWrapper.TITLE);
           
            holder.nearbyIcon.setImageBitmap(Utils.openBinImg(favoriteWrapper.NAME));
            Log.d("TAG getView else",favoriteWrapper.NAME);//MemberFragment
            //顯示廣告
        }



        vi.setOnClickListener(new OnItemClickListener(position));

        return vi;
    }
    public void setCouponsAdapter(int position){
        try {

            JSONObject json_data = mJArray.getJSONObject(position);
            String title = json_data.getString("title");
            JSONObject productProvider = json_data
                    .getJSONObject("productProvider");
            JSONObject displayImage = productProvider
                    .getJSONObject("displayImage");
            mDisplayImage = displayImage.getString("downloadUrl");
            mName = displayImage.getString("fileName");
            String name = productProvider.getString("name");
            String startDate = json_data.getString("startDate");
            String endDate = json_data.getString("endDate");
            holder.nearbyTitle.setText(title);
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    String imageUrl = JsonUtils.URL + mDisplayImage;
                    new DownloadFileFromURL().execute(mDisplayImage, mName);

                }
            });
            thread.start();

            holder.nearbyIcon.setImageDrawable(Drawable
                    .createFromPath(Environment.getExternalStorageDirectory()
                            .toString() + "/" + mName));

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * The listener interface for receiving onItemClick events. The class that
     * is interested in processing a onItemClick event implements this
     * interface, and the object created with that class is registered with a
     * component using the component's
     * <code>addOnItemClickListener<code> method. When
     * the onItemClick event occurs, that object's appropriate
     * method is invoked.
     *
     * @see OnItemClickEvent
     */
    private class OnItemClickListener implements OnClickListener {

        /** The m position. */
        private int mPosition;

        /**
         * Instantiates a new on item click listener.
         *
         * @param position
         *            the position
         */
        OnItemClickListener(int position) {
            mPosition = position;
        }

        /*
         * (non-Javadoc)
         *
         * @see android.view.View.OnClickListener#onClick(android.view.View)
         */
        @Override
        public void onClick(View v) {

            //Log.d("class CouponsAdapter mPosition:", "" + mPosition);

            mCallback.launchDetailPage(mPosition);
        }
    }

    /**
     * The Interface ListAdapterCallbacks.
     */
    public static interface ListAdapterCallbacks {

        /**
         * Launch detail page.
         *
         * @param mPosition
         *            the m position
         */
        void launchDetailPage(int mPosition);
    }

    /**
     * Inits the.
     *
     * @param listAdapterCallbacks
     *            the list adapter callbacks
     */
    public void init(ListAdapterCallbacks listAdapterCallbacks) {
        mCallback = listAdapterCallbacks;
    }


}

然後再CouponsFragment再implement
couponsAdapter = new CouponsAdapter(mContext,jArray);
                mListView.setAdapter(couponsAdapter);
                couponsAdapter.init(new ListAdapterCallbacks() {

                    @Override
                    public void launchDetailPage(int position) {
                        Intent intent = new Intent();
                        Bundle bundle = new Bundle();
                        bundle.putString("JSONARRAY",jArray.toString());
                        bundle.putInt("POSITION", position);
                        intent.putExtras(bundle);
                        intent.setClass(getActivity(), CouponsDetailActivity.class);
                        startActivity(intent);
                    }
                });

沒有留言:

張貼留言