RecyclerView和PullToRefreshListView的对比
项目中上拉刷新和下拉加载一直都是比较常见的;以前一般都是重写ListView或直接用PullToRefreshListView的框架;最近尝试用RecyclerView来实现下拉加载上拉刷新也是不错的。
如图是Demo的效果图:
第一个效果图是用RecyclerView实现加的几个静态数据;
第二个是参考别人写的RefreshRecyclerView来实现上拉刷新下拉加载;我只是把他的静态数据改成网络的数据;不过原先那个有点问题我发现在2次以上的刷新加载后布局会混乱刷新的item竟然复制了一份漂浮在界面上方跟着屏幕一起在滑动!感觉蛮好玩的
第三个是用的PullToRefreshListView来实现的数据和第二个一样都是网络接数据
demo的下载地址:http://download.csdn.net/detail/qq_29774291/9648634
如下是主要代码
- package com.item.my.jiejie.activity;
- import java.util.ArrayList;
- import java.util.List;
- import com.item.my.jiejie.R;
- import com.item.my.jiejie.adpter.MyAdapterThree;
- import com.item.my.jiejie.adpter.MyAdapterThree.OnItemClickListener;
- import com.item.my.jiejie.view.DividerItemDecoration;
- import android.app.Activity;
- import android.os.Bundle;
- import android.support.v7.widget.DefaultItemAnimator;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.widget.Toast;
- /**
- * 用RecyclerView实现
- * @author Administrator
- *
- */
- public class MyRecyleActivity extends Activity{
- private RecyclerView mRecyclerView;
- private List<String> mDataStrings;
- private MyAdapterThree adapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_myrecyle);
- initData();
- mRecyclerView = (RecyclerView)findViewById(R.id.my_recyler);
- mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
- adapter = new MyAdapterThree(this, mDataStrings);
- mRecyclerView.setAdapter(adapter);
- //即给RecyclerView添加分隔线
- mRecyclerView.addItemDecoration(new DividerItemDecoration(MyRecyleActivity.this, LinearLayoutManager.VERTICAL));
- //设置RecyclerView添加或删除条目的动画
- mRecyclerView.setItemAnimator(new DefaultItemAnimator());
- //给RecyclerView设置点击事件
- adapter.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onLongClick(int position) {
- // TODO Auto-generated method stub
- Toast.makeText(MyRecyleActivity.this, "onLongClick你点击了:" + position, Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onClick(int position) {
- // TODO Auto-generated method stub
- Toast.makeText(MyRecyleActivity.this, "onClick 你点击了:" + position, Toast.LENGTH_SHORT).show();
- }
- });
- }
- /**
- * 添加数据
- */
- private void initData() {
- // TODO Auto-generated method stub
- mDataStrings = new ArrayList<String>();
- for (int i = 'A'; i < 'z'; i++)
- {
- mDataStrings.add("" + (char) i);
- }
- }
- }
- package com.item.my.jiejie.adpter;
- import java.util.List;
- import android.content.Context;
- import android.support.v7.widget.RecyclerView;
- import android.support.v7.widget.RecyclerView.ViewHolder;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.View.OnClickListener;
- import android.view.View.OnLongClickListener;
- import android.widget.TextView;
- import com.item.my.jiejie.R;
- public class MyAdapterThree extends RecyclerView.Adapter<MyAdapterThree.MyViewHolder> {
- private Context mcontext;
- private List<String> data;
- private LayoutInflater inflater;
- private OnItemClickListener mOnItemClickListener;
- public interface OnItemClickListener {
- void onClick(int position);
- void onLongClick(int position);
- }
- public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
- this.mOnItemClickListener = onItemClickListener;
- }
- public MyAdapterThree(Context context, List<String> data) {
- this.mcontext = context;
- this.data = data;
- inflater = LayoutInflater.from(mcontext);
- }
- class MyViewHolder extends ViewHolder {
- private TextView tv;
- public MyViewHolder(View view) {
- super(view);
- tv = (TextView) view.findViewById(R.id.id_num);
- }
- }
- @Override
- public int getItemCount() {
- // TODO Auto-generated method stub
- return data.size();
- }
- @Override
- public void onBindViewHolder(MyViewHolder holder, final int position) {
- // TODO Auto-generated method stub
- holder.tv.setText(data.get(position));
- if (mOnItemClickListener != null) {
- holder.itemView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mOnItemClickListener.onClick(position);
- }
- });
- holder.itemView.setOnLongClickListener(new OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- mOnItemClickListener.onLongClick(position);
- return false;
- }
- });
- }
- }
- @Override
- public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- // TODO Auto-generated method stub
- View view = inflater.inflate(R.layout.item_myrecyle, parent,false);
- MyViewHolder holder = new MyViewHolder(view);
- return holder;
- }
- }
重新RecyclerView来实现上拉刷新下拉加载
- package com.item.my.jiejie.activity;
- import java.util.ArrayList;
- import java.util.List;
- import org.xutils.x;
- import org.xutils.common.Callback;
- import org.xutils.http.RequestParams;
- import com.google.gson.Gson;
- import com.google.gson.JsonArray;
- import com.google.gson.JsonElement;
- import com.google.gson.JsonObject;
- import com.google.gson.JsonParser;
- import com.item.my.jiejie.R;
- import com.item.my.jiejie.adpter.MyAdapterOne;
- import com.item.my.jiejie.entity.Item;
- import com.item.my.jiejie.view.RefreshRecyclerView;
- import com.item.my.jiejie.view.RefreshRecyclerView.OnLoadMoreListener;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.support.v4.widget.SwipeRefreshLayout;
- import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
- import android.support.v7.widget.LinearLayoutManager;
- import android.widget.Toast;
- /**
- * 实现
- * @author Administrator
- *
- */
- public class RecycleActivity extends Activity{
- private RefreshRecyclerView recyclerView;
- private SwipeRefreshLayout mRefreshLayout;
- private List<Item> lists = new ArrayList<Item>();
- private MyAdapterOne adapter;
- private int page= 0;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_recyle);
- recyclerView = (RefreshRecyclerView)findViewById(R.id.lv_recycler);
- mRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_refresh_widget);
- mRefreshLayout.setColorSchemeResources(android.R.color.holo_red_light,android.R.color.holo_blue_light,android.R.color.holo_green_light);
- //允许加载更多
- recyclerView.setLoadMoreEnable(true);
- //设置脚布局
- recyclerView.setFooterResource(R.layout.item_footer);
- final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
- recyclerView.setLayoutManager(layoutManager);
- page = 1;
- //默认加载第一个页
- getHttp(page);
- adapter = new MyAdapterOne(this, lists);
- recyclerView.setAdapter(adapter);
- mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
- @Override
- public void onRefresh() {
- // TODO Auto-generated method stub
- page =1;
- lists.clear();
- getHttp(page);
- mRefreshLayout.setRefreshing(false);
- }
- });
- recyclerView.setOnLoadMoreListener(new OnLoadMoreListener() {
- @Override
- public void loadMoreListener() {
- // TODO Auto-generated method stub
- page++;
- System.out.println("加载更多" + page);
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- getHttp(page);
- }
- }, 1000);
- }
- });
- }
- /**
- * 网络请求加载数据
- * @param page2 页数
- */
- private String urlString = "http://111.39.245.156:8080/ccos/ddzx/getProjectByCom.appDo";
- private void getHttp(int page){
- RequestParams params = new RequestParams(urlString);
- params.addBodyParameter("pageSize", "6");
- params.addBodyParameter("pageNo", page + "");
- params.addBodyParameter("pageOn", "" + true);
- params.addBodyParameter("comId", "13");
- x.http().post(params, new Callback.CommonCallback<String>() {
- @Override
- public void onCancelled(CancelledException arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onError(Throwable arg0, boolean arg1) {
- // TODO Auto-generated method stub
- System.out.println("请求失败" +arg0);
- recyclerView.notifyData();
- }
- @Override
- public void onFinished() {
- // TODO Auto-generated method stub
- }
- @Override
- public void onSuccess(String arg0) {
- // TODO Auto-generated method stub
- System.out.println("请求成功" + arg0);
- //lists.clear();
- try {
- JsonParser parser = new JsonParser();
- JsonElement element = parser.parse(arg0);
- JsonObject root = element.getAsJsonObject();
- JsonArray array = root.getAsJsonArray("missionsList");
- for(JsonElement obj : array){
- lists.add(new Gson().fromJson(obj, Item.class));
- //recyclerView.notifyData();
- }
- if(lists.size()<1){
- Toast.makeText(RecycleActivity.this, "暂无记录", Toast.LENGTH_SHORT).show();
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- recyclerView.notifyData();
- }
- }
- });
- }
- }
用PullToRefreshListView 来实现上拉刷新下拉加载更多
- package com.item.my.jiejie.activity;
- import java.util.ArrayList;
- import java.util.List;
- import org.xutils.x;
- import org.xutils.common.Callback;
- import org.xutils.http.RequestParams;
- import com.google.gson.Gson;
- import com.google.gson.JsonArray;
- import com.google.gson.JsonElement;
- import com.google.gson.JsonObject;
- import com.google.gson.JsonParser;
- import com.handmark.pulltorefresh.library.PullToRefreshBase;
- import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
- import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
- import com.handmark.pulltorefresh.library.PullToRefreshListView;
- import com.item.my.jiejie.R;
- import com.item.my.jiejie.adpter.MyAdapterTwo;
- import com.item.my.jiejie.entity.Item;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.ListView;
- import android.widget.Toast;
- /**
- * PullToRefreshListView 来实现上拉刷新下拉加载更多
- * @author Administrator
- *
- */
- public class PulltoActivity extends Activity{
- private PullToRefreshListView mListView;
- private int page = 0;
- private List<Item> lists = new ArrayList<Item>();
- private MyAdapterTwo adapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_pullto);
- setView();
- }
- private void setView() {
- // TODO Auto-generated method stub
- mListView = (PullToRefreshListView)findViewById(R.id.lv_listviewtwo);
- mListView.setMode(Mode.BOTH);
- ListView listView = mListView.getRefreshableView();
- page = 1;
- getHttp(page);
- OnRefreshListener2<ListView> mListener2 = new OnRefreshListener2<ListView>() {
- @Override
- public void onPullDownToRefresh(
- PullToRefreshBase<ListView> refreshView) {
- // TODO Auto-generated method stub
- lists.clear();
- adapter.notifyDataSetChanged();
- page = 1;
- getHttp(page);
- }
- @Override
- public void onPullUpToRefresh(
- PullToRefreshBase<ListView> refreshView) {
- // TODO Auto-generated method stub
- page++;
- getHttp(page);
- }
- };
- mListView.setOnRefreshListener(mListener2);
- adapter = new MyAdapterTwo(PulltoActivity.this,lists);
- listView.setAdapter(adapter);
- }
- /**
- * 网络请求加载数据
- * @param page2 页数
- */
- private String urlString = "http://111.39.245.156:8080/ccos/ddzx/getProjectByCom.appDo";
- private void getHttp(int page2) {
- // TODO Auto-generated method stub
- RequestParams params = new RequestParams(urlString);
- params.addBodyParameter("pageSize", "6");
- params.addBodyParameter("pageNo", page2 + "");
- params.addBodyParameter("pageOn", "" + true);
- params.addBodyParameter("comId", "13");
- x.http().post(params, new Callback.CommonCallback<String>() {
- @Override
- public void onCancelled(CancelledException arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onError(Throwable arg0, boolean arg1) {
- // TODO Auto-generated method stub
- System.out.println(arg0 + "请求失败");
- adapter.notifyDataSetChanged();
- mListView.postDelayed(new Runnable() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- mListView.onRefreshComplete();
- }
- }, 800);
- }
- @Override
- public void onFinished() {
- // TODO Auto-generated method stub
- }
- @Override
- public void onSuccess(String arg0) {
- // TODO Auto-generated method stub
- System.out.println("请求成功 " + arg0);
- try {
- JsonParser parser = new JsonParser();
- JsonElement element = parser.parse(arg0);
- JsonObject root = element.getAsJsonObject();
- JsonArray array = root.getAsJsonArray("missionsList");
- for(JsonElement obj : array){
- lists.add(new Gson().fromJson(obj, Item.class));
- }
- if(lists.size()<1){
- Toast.makeText(PulltoActivity.this, "暂无记录", Toast.LENGTH_SHORT).show();
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- adapter.notifyDataSetChanged();
- mListView.postDelayed(new Runnable() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- mListView.onRefreshComplete();
- }
- }, 800);
- }
- }
- });
- }
- }
- package com.item.my.jiejie.adpter;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.List;
- import java.util.Locale;
- import com.item.my.jiejie.R;
- import com.item.my.jiejie.entity.Item;
- import android.content.Context;
- import android.text.TextUtils;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.TextView;
- /**
- * 第二个的适配器
- *
- * @author Administrator
- *
- */
- public class MyAdapterTwo extends BaseAdapter {
- private Context context;
- private List<Item> list;
- public MyAdapterTwo(Context context, List<Item> list) {
- this.context = context;
- this.list = list;
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- if (list != null) {
- return list.size();
- } else {
- return 0;
- }
- }
- @Override
- public Object getItem(int arg0) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public long getItemId(int arg0) {
- // TODO Auto-generated method stub
- return 0;
- }
- @Override
- public View getView(int arg0, View arg1, ViewGroup arg2) {
- // TODO Auto-generated method stub
- ViewHolder holder = null;
- if (arg1 == null) {
- holder = new ViewHolder();
- arg1 = View.inflate(context, R.layout.item_mytwo, null);
- holder.tv_place = (TextView) arg1.findViewById(R.id.item_place);
- holder.tv_code = (TextView) arg1.findViewById(R.id.item_code);
- holder.tv_time = (TextView) arg1.findViewById(R.id.item_time);
- arg1.setTag(holder);
- } else {
- holder = (ViewHolder) arg1.getTag();
- }
- Date time = new Date(list.get(arg0).getRequireDtime());
- DateFormat df = new SimpleDateFormat("yy-MM-dd HH:mm",Locale.getDefault());
- String resultTime = df.format(time);
- String misName = list.get(arg0).getMisName();
- if(!TextUtils.isEmpty(misName)){
- holder.tv_place.setText(misName + "");
- }else {
- holder.tv_place.setText("该地点暂无名称");
- }
- holder.tv_code.setText(list.get(arg0).getCurLoad() + "/"
- + list.get(arg0).getRequireAmount());
- holder.tv_time.setText(resultTime);
- return arg1;
- }
- static class ViewHolder {
- private TextView tv_place;
- private TextView tv_code;
- private TextView tv_time;
- }
- }
补充:当我们需要ScrollView上下拉刷新
提供2种简单的方式
第一种用PullToRefreshScrollView
- <com.handmark.pulltorefresh.library.PullToRefreshScrollView
- android:id="@+id/pull_my_scrollview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- ptr:ptrAnimationStyle="flip"
- ptr:ptrDrawable="@drawable/pull_icon_big"
- ptr:ptrHeaderBackground="#6593CB"
- ptr:ptrHeaderTextColor="#FFFFFF" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- mRefreshScrollView = (PullToRefreshScrollView) findViewById(R.id.pull_my_scrollview);
- tv_text = (TextView) findViewById(R.id.tv_text);
- mRefreshScrollView.setMode(Mode.PULL_FROM_START);
- // 上拉监听函数
- mRefreshScrollView
- .setOnRefreshListener(new OnRefreshListener<ScrollView>() {
- @Override
- public void onRefresh(
- PullToRefreshBase<ScrollView> refreshView) {
- // TODO Auto-generated method stub
- String label = DateUtils.formatDateTime(ScrollActivity.this.getApplicationContext(),
- System.currentTimeMillis(),
- DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
- // Update the LastUpdatedLabel
- refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
- getHttp();
- }
- });
//mRefreshScrollView.setRefreshing(true);
第二种用android.support.v4.widget.SwipeRefreshLayout
- <?xml version="1.0" encoding="utf-8"?>
- <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/swipe"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/tv_swipe"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="wodsdfsf" />
- </LinearLayout>
- </ScrollView>
- </android.support.v4.widget.SwipeRefreshLayout>
- package com.item.jiejie.activity;
- import com.item.jiejie.R;
- import android.app.Activity;
- import android.os.Bundle;
- import android.support.v4.widget.SwipeRefreshLayout;
- import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
- import android.widget.TextView;
- /**
- * SwipeRefreshLayout
- *
- * @author Administrator
- *
- */
- public class SwipeActivity extends Activity {
- private SwipeRefreshLayout swipeLayout;
- private TextView tv_sView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_swipe);
- swipeLayout = (SwipeRefreshLayout)findViewById(R.id.swipe);
- tv_sView =(TextView)findViewById(R.id.tv_swipe);
- swipeLayout.setColorSchemeResources(android.R.color.holo_red_light,android.R.color.holo_blue_light,android.R.color.holo_green_light);
- swipeLayout.setOnRefreshListener(new OnRefreshListener() {
- @Override
- public void onRefresh() {
- // TODO Auto-generated method stub
- tv_sView.setText("刷新完成");
- swipeLayout.postDelayed(new Runnable() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- swipeLayout.setRefreshing(false);
- }
- }, 2000);
- System.out.println("1");
- }
- });
- }
- }
RecyclerView和PullToRefreshListView的对比的更多相关文章
- RecyclerView 和 ListView 使用对比分析
原文地址:http://blog.coderclock.com/2016/08/08/android/RecyclerView%20%E5%92%8C%20ListView%20%E4%BD%BF%E ...
- RecyclerView源码分析(一)--整体设计
RecyclerView这个控件出来已经有一段时间了,如果看这篇文章的你,还没有使用过这个控件.那请先去学习怎样使用.不然看也白看.这里奉上一些关于介绍RecyclerView使用方法的优秀博客: 鸿 ...
- 【Android】10.5 滚动视图(RecyclerView)
分类:C#.Android.VS2015: 创建日期:2016-02-19 一.简介 滚动视图(RecyclerView)的用法与布局控件的用法类似,唯一不同的是,所有布局控件中都可以包含多个组件,而 ...
- RecyclerView 源码分析(二) —— 缓存机制
在前一篇文章 RecyclerView 源码分析(一) -- 绘制流程解析 介绍了 RecyclerView 的绘制流程,RecyclerView 通过将绘制流程从 View 中抽取出来,放到 Lay ...
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...
- RecyclerView与ListView 对比浅析:缓存机制
一. 背景 PS:相关知识:ListView与RecyclerView缓存机制原理大致相似,如下图所示: 滑动过程中,离屏的ItemView即被回收至缓存,入屏的ItemView则会优先从缓存中获取, ...
- ListView与RecyclerView对比浅析——缓存机制
https://www.jianshu.com/p/193fb966e954 一,背景 RecyclerView是谷歌官方出的一个用于大量数据展示的新控件,可以用来代替传统的ListView,更加强大 ...
- [转]Android ListView 与 RecyclerView 对比浅析—缓存机制
从源码角度剖析ListView 与 RecyclerView 缓存机制的不同 https://zhuanlan.zhihu.com/p/23339185 原文地址:http://dev.qq.com/ ...
- 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)
转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息] ...
随机推荐
- C#与JS实现 获取指定字节长度 中英文混合字符串 的方法
平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错. 尤其是插入中英文混合字符串时,SQL Server中一般中文要 ...
- sql语句中获取datetime的日期部分或时间部分
sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- winform 程序制作自己的数字签名(续)
在上一篇文章<winform 程序制作自己的数字签名>中我们已经可以得到我们程序定制的数字签名了,但是比较讨厌的是每次编译之后,数字签名需要重新手动添加. 我们需要的是在程序编译时自动添加 ...
- 【WP 8.1开发】解决摄像头翻转问题(RuntimeApp篇)
昨天,我非常马虎地给大家说了有关处理物理摄像头翻转的话题,今天,还是这个话题,而且内容不差,只是为了完整性,顺便也提供了运行时API的版本,其实实现起来与SL框架版本差不多,毕竟这两个框架都有不少AP ...
- 新浪微博SDK开发(1):总述
花了几天时间,消耗了九牛六虎之力,新浪微博大部分API已经封装,但有部分API实在太难封装. 说起这封装,我必须严重地.从人品和技术层面鄙视一下新浪的程序员,实在太菜了.估计菜鸟都被大企业吸收了,菜到 ...
- js连续指定两次或者多次的click事件(解决办法)
setTimeout (表达式,延时时间)setTimeout(表达式,交互时间)延时时间/交互时间是以豪秒为单位的(1000ms=1s) setTimeout 在执行时,是在载入后延迟指定时间后, ...
- java中异常注意问题(发生在多态是的异常问题)
/* 异常的注意事项: 1,子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类. 2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集. 简单说:子类 ...
- backbone库学习-model
backbone库的结构: http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html 本文所有例子来自于http://blog.cs ...
- JavaScript及兼容性笔记
1. Json to String JSON.stringify(jsonobj)//(IE8+,Chrome 1+,FF 3+) //参考 http://www.nowamagic.net/libr ...