大学狗在参加一个比赛,正好里面要使用下拉刷新列表来进行更新,索性就写一个博客记录一下,顺便做了一个小的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 资源地址