android关于下拉刷新列表的使用列表

大学狗在参加一个比赛,正好里面要使用下拉刷新列表来进行更新,索性就写一个博客记录一下,顺便做了一个小的demo,废话不多说,进入代码。


listview中的Item布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="80dp"
    android:paddingTop="20dp"
    android:paddingBottom="20dp"
    android:background="#8583B6">
    <TextView

        android:layout_weight="3"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:gravity="center_vertical"
        android:id="@+id/textView_good"
        android:textSize="20sp"
        android:text="商品名称"/>
    <TextView
        android:layout_weight="3"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:textSize="20sp"
        android:gravity="center_vertical"
        android:id="@+id/textView_price"
        android:text="价格:"/>
    <LinearLayout

        android:layout_marginTop="2dp"
        android:layout_weight="3"
        android:layout_width="wrap_content"
        android:orientation="horizontal"
        android:layout_height="40dp"
        >

        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:id="@+id/menulist_jian"
            android:layout_gravity="center"
            android:layout_marginRight="10dp"
            android:background="@drawable/jian"/>
        <TextView
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="1dp"
            android:id="@+id/num"
            android:textSize="25sp"
            android:background="@drawable/menushop_list_textview_item"
            android:text="1"
            />
        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:id="@+id/menu_list_plus"
            android:layout_marginLeft="10dp"
            android:layout_gravity="center"
            android:background="@drawable/plus"/>
    </LinearLayout>
    <ImageView
        android:layout_weight="1"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="25dp"
        android:id="@+id/menu_list_delete"
        android:background="@drawable/trash"/>



</LinearLayout>
这边有个bug,使用这个当做item布局文件时候,listview里面无法自适应item,会产生显示结果不完全的效果,所以我自己将Item里面的控件高度进行了设置进行设置,以后在深入研究一下。


这是适配器文件:



import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;





public class MenuAdapter extends BaseAdapter {
    private List<Goods> goodslist;
    private Context context;
    private int count=1;


    public MenuAdapter(Context context,List<Goods> goodslist) {
        this.goodslist = goodslist;
        this.context=context;
    }

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

    @Override
    public Object getItem(int position) {

        return goodslist.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView==null)
        {
            //viewholder初始化
            viewHolder=new ViewHolder();
            LayoutInflater layoutInflater=LayoutInflater.from(context);
            convertView=layoutInflater.inflate(R.layout.shopmenu_listview_item,null);
            viewHolder.textView_goods= (TextView) convertView.findViewById(R.id.textView_good);
            viewHolder.textView_price= (TextView) convertView.findViewById(R.id.textView_price);
            viewHolder.plus= (ImageView) convertView.findViewById(R.id.menu_list_plus);
            viewHolder.jian= (ImageView) convertView.findViewById(R.id.menulist_jian);
            viewHolder.delete= (ImageView) convertView.findViewById(R.id.menu_list_delete);
            viewHolder.textView_num= (TextView) convertView.findViewById(R.id.num);
            convertView.setTag(viewHolder);
        }else {
            viewHolder= (ViewHolder) convertView.getTag();
        }

        //加载item项目,并进行itme上控件监听操作

        if (goodslist.get(position)!=null){
            viewHolder.textView_price.setText(goodslist.get(position).getPrice());
            viewHolder.textView_goods.setText(goodslist.get(position).getGoods_name());
            viewHolder.plus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                  count++;
                    viewHolder.textView_num.setText(count+"");
                }
            });
            viewHolder.delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });
            viewHolder.jian.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(count!=1){
                        count--;
                        viewHolder.textView_num.setText(count+"");
                    }else {
                       viewHolder.delete.setVisibility(View.INVISIBLE);
                    }
                }
            });

        }

        return convertView;
    }


    private static class ViewHolder
    {
        TextView textView_goods;
        TextView textView_price;
        ImageView plus,jian,delete;
        TextView textView_num;


    }

}
下面是主布局,我是用的是fragment,想要用activity的自己进行转换就可以了,在此就不多叙述了




import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.handmark.pulltorefresh.library.extras.SoundPullEventListener;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;




 */
public class ShoppingFragment extends Fragment {


    private LinkedList<String> mListItems;
    private List<Goods> mylist;
    private PullToRefreshListView mPullRefreshListView;
    private MenuAdapter menuAdapter;
    private Button btn_shopmenu_clear,btn_menu_pay;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root=inflater.inflate(R.layout.activity_ptr_list,container,false);
        mPullRefreshListView = (PullToRefreshListView) root.findViewById(R.id.pull_refresh_list);


        // 进行下拉刷新监听操作
        mPullRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
            @Override
            public void onRefresh(PullToRefreshBase<ListView> refreshView) {
                String label = DateUtils.formatDateTime(getActivity(), System.currentTimeMillis(),
                        DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);

                // Update the LastUpdatedLabel
                refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);

                // 开启线程操作.
                new GetDataTask().execute();
            }
        });


        //按钮功能

        btn_shopmenu_clear= (Button) root.findViewById(R.id.btn_clearall);
        btn_menu_pay= (Button) root.findViewById(R.id.btn_count);
        btn_menu_pay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        btn_shopmenu_clear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });


        // 当下拉到底部进行监听提醒
        mPullRefreshListView.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() {

            @Override
            public void onLastItemVisible() {
                Toast.makeText(getActivity(), "End of List!", Toast.LENGTH_SHORT).show();
            }
        });

        ListView actualListView = mPullRefreshListView.getRefreshableView();

        // Need to use the Actual ListView when registering for Context Menu
        registerForContextMenu(actualListView);

        mylist=new ArrayList<Goods>();
        mylist.add(new Goods("aaa","11"));
        menuAdapter=new MenuAdapter(getActivity(),mylist);





        /**
         * 增加监听触发声音事件
         */
        SoundPullEventListener<ListView> soundListener = new SoundPullEventListener<ListView>(getActivity());
        soundListener.addSoundEvent(PullToRefreshBase.State.PULL_TO_REFRESH, R.raw.pull_event);
        soundListener.addSoundEvent(PullToRefreshBase.State.RESET, R.raw.reset_sound);
        soundListener.addSoundEvent(PullToRefreshBase.State.REFRESHING, R.raw.refreshing_sound);
        mPullRefreshListView.setOnPullEventListener(soundListener);



        actualListView.setAdapter(menuAdapter);




        return  root;
    }
    private class GetDataTask extends AsyncTask<Void, Void, String[]> {

        @Override
        protected String[] doInBackground(Void... params) {
            // Simulates a background job.
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }
            return mStrings;
        }

        @Override
        protected void onPostExecute(String[] result) {
            mylist.add(new Goods("aaa","22"));
//            mListItems.addFirst("Added after refresh...");
//            mAdapter.notifyDataSetChanged();
            menuAdapter.notifyDataSetChanged();

            // Call onRefreshComplete when the list has been refreshed.
            mPullRefreshListView.onRefreshComplete();

            super.onPostExecute(result);
        }
    }

    private String[] mStrings = { "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
            "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre",
            "Allgauer Emmentaler", "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
            "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre",
            "Allgauer Emmentaler" };
}
上面是我自己依照开源包进行修改的,线程里面的内容,没有怎么改,因为没有进行网络间的服务,想要进行的请自己改正,,还是比较简单的,github中的开源包还是需要自己多加研究,下面有开源包的下载,需要的朋友可以自行下载。


能有哪位朋友告诉我怎么在上传一个小视频么,截图很难看出有什么功能效果。。。。,知道的朋友能不能回复我一下,谢谢了~~


http://download.csdn.net/my  资源地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值