- 浏览: 932455 次
- 性别:
- 来自: 山西
文章分类
最新评论
-
白小默:
你好 可以提供下源码DEMO吗,不知为何,我导出来的excel ...
jxls 使用模板文件导出生成excel -
zkzqzzz:
博主威武!
让微信二维码扫描您的APK -
zkzqzzz:
感谢博主 原来那些类都不是必须的 或者自己写!!博主真棒 ...
抢红包插件实现原理浅析 -
zkzqzzz:
博主 请问你的其他类在哪里呢?
抢红包插件实现原理浅析 -
zkzqzzz:
其他类在哪呢?
抢红包插件实现原理浅析
这张图片左边部分和右边部分还是有很大的不同,不是指内容上,是指布局上,左边的是我今天写这次代码之前的布局,root是用的RelativeLayout,右边是用的FrameLayout,体现在界面上就是右边的list内容可以顶到最上面,而左边的list是在上面的topBar下面。
看布局代码:布局代码还用到了include,主要是用来重用布局的。
看布局代码:布局代码还用到了include,主要是用来重用布局的。
- <?xml version="1.0" encoding="utf-8"?>
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent">
- <LinearLayout android:orientation="vertical" android:background="#ffffffff" android:layout_width="fill_parent" android:layout_height="fill_parent">
- <ListView android:id="@id/android:list" android:paddingTop="45.0dip" android:paddingBottom="50.0dip" android:layout_width="fill_parent" android:cacheColorHint="#00000000" android:fadingEdge="none" android:fastScrollEnabled="false" android:clipToPadding="false"
- android:layout_height="wrap_content" android:divider="@drawable/list_divider"/>
- <TextView android:text="" android:textSize="20.0sp" android:textColor="#ff5a5a5a" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="15.0dip" android:visibility="invisible"/>
- </LinearLayout>
- <include android:id="@+id/home_top" layout="@layout/top_panel" android:layout_width="fill_parent" android:layout_height="wrap_content" />
- </FrameLayout>
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:background="#ffffffff" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@id/android:list" android:paddingTop="45.0dip" android:paddingBottom="50.0dip" android:layout_width="fill_parent" android:cacheColorHint="#00000000" android:fadingEdge="none" android:fastScrollEnabled="false" android:clipToPadding="false" android:layout_height="wrap_content" android:divider="@drawable/list_divider"/> <TextView android:text="" android:textSize="20.0sp" android:textColor="#ff5a5a5a" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="15.0dip" android:visibility="invisible"/> </LinearLayout> <include android:id="@+id/home_top" layout="@layout/top_panel" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </FrameLayout>
把图片往下拉,此时还未到加载到数据的最底部。
继续往下拉,ok,见底了,看到更多的提示了嘛,点击他
出现进度条提示
加载完毕之后显示新的一页,继续往下拉,又会看见更多提示,然后如此循环。主要是利用了隐藏。
下面看看主的Activity的代码:
- public class HomeTimeLineActivity extends ListActivity implements OnItemClickListener,OnItemLongClickListener{
- private DataHelper dataHelper;
- private UserInfo user;
- private MyWeiboSync weibo;
- private ListView listView;
- private HomeAdapter adapter;
- private JSONArray array;
- private AsyncImageLoader asyncImageLoader;
- private Handler handler;
- private ProgressDialog progressDialog;
- private View top_panel;
- private Button top_btn_left;
- private Button top_btn_right;
- private TextView top_title;
- private LinearLayout list_footer;
- private TextView tv_msg;
- private LinearLayout loading;
- private List<JSONObject> list;//微博数据列表
- private ExecutorService executorService;
- private static int PAGE_SIZE = 5;//每页显示的微博条数
- private int TOTAL_PAGE = 0;//当前已经记在的微博页数
- private static int THREADPOOL_SIZE = 5;//线程池的大小
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.home);
- setUpViews();
- setUpListeners();
- dataHelper = DataBaseContext.getInstance(getApplicationContext());
- weibo = WeiboContext.getInstance();
- List<UserInfo> userList = dataHelper.GetUserList(false);
- SharedPreferences preferences = getSharedPreferences("default_user",Activity.MODE_PRIVATE);
- String nick = preferences.getString("user_default_nick", "");//取得默认账号信息
- if (nick != "") {
- user = dataHelper.getUserByName(nick,userList);
- top_title.setText(nick);//顶部工具栏昵称
- }
- weibo.setAccessTokenKey(user.getToken());
- weibo.setAccessTokenSecrect(user.getTokenSecret());
- progressDialog = new ProgressDialog(HomeTimeLineActivity.this);// 生成一个进度条
- progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
- progressDialog.setTitle("请稍等");
- progressDialog.setMessage("正在读取数据中!");
- handler = new GetHomeTimeLineHandler();
- executorService.submit(new GetHomeTimeLineThread());//耗时操作,开启一个新线程获取数据
- progressDialog.show();
- }
- private void setUpViews(){
- list_footer = (LinearLayout)LayoutInflater.from(HomeTimeLineActivity.this).inflate(R.layout.list_footer, null);
- tv_msg = (TextView)list_footer.findViewById(R.id.tv_msg);
- loading = (LinearLayout)list_footer.findViewById(R.id.loading);
- listView = getListView();
- top_panel = (View)findViewById(R.id.home_top);
- top_btn_left = (Button)top_panel.findViewById(R.id.top_btn_left);
- top_btn_right = (Button)top_panel.findViewById(R.id.top_btn_right);
- top_title = (TextView)top_panel.findViewById(R.id.top_title);
- listView.addFooterView(list_footer);//这儿是关键中的关键呀,利用FooterVIew分页动态加载
- list = new ArrayList<JSONObject>();
- executorService = Executors.newFixedThreadPool(THREADPOOL_SIZE);
- }
- private void setUpListeners(){
- listView.setOnItemClickListener(this);
- listView.setOnItemLongClickListener(this);
- top_btn_right.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(HomeTimeLineActivity.this,AddWeiboActivity.class);
- startActivity(intent);
- }
- });
- tv_msg.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //Toast.makeText(HomeTimeLineActivity.this, "我将消失了", Toast.LENGTH_SHORT).show();
- executorService.submit(new GetHomeTimeLineThread());
- tv_msg.setVisibility(View.GONE);//隐藏更多提示的TextView
- loading.setVisibility(View.VISIBLE);//显示最下方的进度条
- }
- });
- }
- class GetHomeTimeLineHandler extends Handler {
- @Override
- public void handleMessage(Message msg) {
- adapter = new HomeAdapter(HomeTimeLineActivity.this, list);
- listView.setAdapter(adapter);
- listView.setSelection((TOTAL_PAGE-1)*PAGE_SIZE+1);//设置最新获取一页数据成功后显示数据的起始数据
- progressDialog.dismiss();// 关闭进度条
- loading.setVisibility(View.GONE);//隐藏下方的进度条
- tv_msg.setVisibility(View.VISIBLE);//显示出更多提示TextView
- }
- }
- class GetHomeTimeLineThread extends Thread {
- @Override
- public void run() {
- refreshList();
- Message msg = handler.obtainMessage();//通知线程来处理范围的数据
- handler.sendMessage(msg);
- }
- }
- private void refreshList(){
- String jsonStr = weibo.getHomeMsg(weibo.getAccessTokenKey(), weibo.getAccessTokenSecrect(), PageFlag.PageFlag_First, (TOTAL_PAGE+1)*PAGE_SIZE);
- try {
- JSONObject dataObj = new JSONObject(jsonStr).getJSONObject("data");
- array = dataObj.getJSONArray("info");
- if(array!=null&&array.length()>0){
- TOTAL_PAGE++;
- list.clear();
- int lenth =array.length();
- for(int i = 0;i<lenth;i++){
- list.add(array.optJSONObject(i));
- }
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- class HomeAdapter extends BaseAdapter {
- private Context context;
- private LayoutInflater inflater;
- private List<JSONObject> list;
- public HomeAdapter(Context context, List<JSONObject> list) {
- super();
- this.context = context;
- this.list = list;
- this.inflater = LayoutInflater.from(context);
- }
- @Override
- public int getCount() {
- return list.size();
- }
- @Override
- public Object getItem(int position) {
- return list.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(final int position, View convertView, ViewGroup parent) {
- asyncImageLoader = new AsyncImageLoader();
- HomeViewHolder viewHolder = new HomeViewHolder();
- JSONObject data = (JSONObject)list.get(position);
- JSONObject source = null;
- convertView = inflater.inflate(R.layout.home_list_item, null);
- try {
- source = data.getJSONObject("source");
- } catch (JSONException e1) {
- e1.printStackTrace();
- }
- viewHolder.home_headicon = (ImageView) convertView.findViewById(R.id.home_headicon);
- viewHolder.home_nick = (TextView) convertView.findViewById(R.id.home_nick);
- viewHolder.home_hasimage = (ImageView) convertView.findViewById(R.id.home_hasimage);
- viewHolder.home_timestamp = (TextView) convertView.findViewById(R.id.home_timestamp);
- viewHolder.home_origtext = (TextView) convertView.findViewById(R.id.home_origtext);
- viewHolder.home_source = (TextView) convertView.findViewById(R.id.home_source);
- if(data!=null){
- try {
- convertView.setTag(data.get("id"));
- //viewHolder.home_headicon.setImageDrawable(ImageUtil.getDrawableFromUrl(data.getString("head")+"/100"));//同步加载图片
- viewHolder.home_nick.setText(data.getString("nick"));
- viewHolder.home_timestamp.setText(TimeUtil.converTime(Long.parseLong(data.getString("timestamp"))));
- //viewHolder.home_origtext.setText(data.getString("origtext"), TextView.BufferType.SPANNABLE);
- /*Spannable spannable = (Spannable)viewHolder.home_origtext.getText();//加高亮显示
- spannable.setSpan(new BackgroundColorSpan(Color.RED), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);*/
- SpannableString spannable = new SpannableString(data.getString("origtext"));
- //把字符串解析成本地表情
- spannable = TextUtil.getImageSpannableString(spannable, RegexUtil.getStartAndEndIndex(data.getString("origtext"), Pattern.compile("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources());
- viewHolder.home_origtext.setText(spannable);
- if(source!=null){
- viewHolder.home_source.setText(source.getString("nick")+":"+source.getString("origtext"));
- viewHolder.home_source.setBackgroundResource(R.drawable.home_source_bg);
- }
- //异步加载图片
- Drawable cachedImage = asyncImageLoader.loadDrawable(data.getString("head")+"/100",viewHolder.home_headicon, new ImageCallback(){
- @Override
- public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl) {
- imageView.setImageDrawable(imageDrawable);
- }
- });
- if (cachedImage == null) {
- viewHolder.home_headicon.setImageResource(R.drawable.icon);
- } else {
- viewHolder.home_headicon.setImageDrawable(cachedImage);
- }
- if(data.getJSONArray("image")!=null){
- viewHolder.home_hasimage.setImageResource(R.drawable.hasimage);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return convertView;
- }
- }
- static class HomeViewHolder {
- private ImageView home_headicon;
- private TextView home_nick;
- private TextView home_timestamp;
- private TextView home_origtext;
- private TextView home_source;
- private ImageView home_hasimage;
- }
- @Override
- public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position,long arg3) {
- CharSequence [] items = null;
- try {
- items= new CharSequence[]{"转播","对话","点评","收藏",((JSONObject)array.opt(position)).getString("nick"),"取消"};
- } catch (JSONException e) {
- e.printStackTrace();
- }
- new AlertDialog.Builder(HomeTimeLineActivity.this).setTitle("选项").setItems(items,new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- switch (which) {
- case 0: {
- }
- break;
- case 1: {
- }
- break;
- case 2: {
- }
- break;
- case 3: {
- }
- break;
- case 4: {
- }
- break;
- case 5: {
- }
- break;
- default:
- break;
- }
- }
- }).show();
- return false;
- }
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
- JSONObject weiboInfo = (JSONObject)array.opt(position);
- Intent intent = new Intent(HomeTimeLineActivity.this, WeiboDetailActivity.class);
- try {
- intent.putExtra("weiboid", weiboInfo.getString("id"));
- startActivity(intent);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu){
- super.onCreateOptionsMenu(menu);
- MenuInflater menuInflater = getMenuInflater();
- menuInflater.inflate(R.menu.home_timeline_menu, menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_settings: {
- }
- break;
- case R.id.menu_official: {
- }
- break;
- case R.id.menu_feedback: {
- }
- break;
- case R.id.menu_account: {
- Intent intent = new Intent(HomeTimeLineActivity.this,
- AccountActivity.class);
- startActivity(intent);
- }
- break;
- case R.id.menu_about: {
- Intent intent = new Intent(HomeTimeLineActivity.this,
- AddWeiboActivity.class);
- startActivity(intent);
- }
- break;
- case R.id.menu_quit: {
- }
- break;
- default:
- break;
- }
- return true;
- }
- }
public class HomeTimeLineActivity extends ListActivity implements OnItemClickListener,OnItemLongClickListener{ private DataHelper dataHelper; private UserInfo user; private MyWeiboSync weibo; private ListView listView; private HomeAdapter adapter; private JSONArray array; private AsyncImageLoader asyncImageLoader; private Handler handler; private ProgressDialog progressDialog; private View top_panel; private Button top_btn_left; private Button top_btn_right; private TextView top_title; private LinearLayout list_footer; private TextView tv_msg; private LinearLayout loading; private List<JSONObject> list;//微博数据列表 private ExecutorService executorService; private static int PAGE_SIZE = 5;//每页显示的微博条数 private int TOTAL_PAGE = 0;//当前已经记在的微博页数 private static int THREADPOOL_SIZE = 5;//线程池的大小 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); setUpViews(); setUpListeners(); dataHelper = DataBaseContext.getInstance(getApplicationContext()); weibo = WeiboContext.getInstance(); List<UserInfo> userList = dataHelper.GetUserList(false); SharedPreferences preferences = getSharedPreferences("default_user",Activity.MODE_PRIVATE); String nick = preferences.getString("user_default_nick", "");//取得默认账号信息 if (nick != "") { user = dataHelper.getUserByName(nick,userList); top_title.setText(nick);//顶部工具栏昵称 } weibo.setAccessTokenKey(user.getToken()); weibo.setAccessTokenSecrect(user.getTokenSecret()); progressDialog = new ProgressDialog(HomeTimeLineActivity.this);// 生成一个进度条 progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setTitle("请稍等"); progressDialog.setMessage("正在读取数据中!"); handler = new GetHomeTimeLineHandler(); executorService.submit(new GetHomeTimeLineThread());//耗时操作,开启一个新线程获取数据 progressDialog.show(); } private void setUpViews(){ list_footer = (LinearLayout)LayoutInflater.from(HomeTimeLineActivity.this).inflate(R.layout.list_footer, null); tv_msg = (TextView)list_footer.findViewById(R.id.tv_msg); loading = (LinearLayout)list_footer.findViewById(R.id.loading); listView = getListView(); top_panel = (View)findViewById(R.id.home_top); top_btn_left = (Button)top_panel.findViewById(R.id.top_btn_left); top_btn_right = (Button)top_panel.findViewById(R.id.top_btn_right); top_title = (TextView)top_panel.findViewById(R.id.top_title); listView.addFooterView(list_footer);//这儿是关键中的关键呀,利用FooterVIew分页动态加载 list = new ArrayList<JSONObject>(); executorService = Executors.newFixedThreadPool(THREADPOOL_SIZE); } private void setUpListeners(){ listView.setOnItemClickListener(this); listView.setOnItemLongClickListener(this); top_btn_right.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(HomeTimeLineActivity.this,AddWeiboActivity.class); startActivity(intent); } }); tv_msg.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Toast.makeText(HomeTimeLineActivity.this, "我将消失了", Toast.LENGTH_SHORT).show(); executorService.submit(new GetHomeTimeLineThread()); tv_msg.setVisibility(View.GONE);//隐藏更多提示的TextView loading.setVisibility(View.VISIBLE);//显示最下方的进度条 } }); } class GetHomeTimeLineHandler extends Handler { @Override public void handleMessage(Message msg) { adapter = new HomeAdapter(HomeTimeLineActivity.this, list); listView.setAdapter(adapter); listView.setSelection((TOTAL_PAGE-1)*PAGE_SIZE+1);//设置最新获取一页数据成功后显示数据的起始数据 progressDialog.dismiss();// 关闭进度条 loading.setVisibility(View.GONE);//隐藏下方的进度条 tv_msg.setVisibility(View.VISIBLE);//显示出更多提示TextView } } class GetHomeTimeLineThread extends Thread { @Override public void run() { refreshList(); Message msg = handler.obtainMessage();//通知线程来处理范围的数据 handler.sendMessage(msg); } } private void refreshList(){ String jsonStr = weibo.getHomeMsg(weibo.getAccessTokenKey(), weibo.getAccessTokenSecrect(), PageFlag.PageFlag_First, (TOTAL_PAGE+1)*PAGE_SIZE); try { JSONObject dataObj = new JSONObject(jsonStr).getJSONObject("data"); array = dataObj.getJSONArray("info"); if(array!=null&&array.length()>0){ TOTAL_PAGE++; list.clear(); int lenth =array.length(); for(int i = 0;i<lenth;i++){ list.add(array.optJSONObject(i)); } } } catch (JSONException e) { e.printStackTrace(); } } class HomeAdapter extends BaseAdapter { private Context context; private LayoutInflater inflater; private List<JSONObject> list; public HomeAdapter(Context context, List<JSONObject> list) { super(); this.context = context; this.list = list; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { asyncImageLoader = new AsyncImageLoader(); HomeViewHolder viewHolder = new HomeViewHolder(); JSONObject data = (JSONObject)list.get(position); JSONObject source = null; convertView = inflater.inflate(R.layout.home_list_item, null); try { source = data.getJSONObject("source"); } catch (JSONException e1) { e1.printStackTrace(); } viewHolder.home_headicon = (ImageView) convertView.findViewById(R.id.home_headicon); viewHolder.home_nick = (TextView) convertView.findViewById(R.id.home_nick); viewHolder.home_hasimage = (ImageView) convertView.findViewById(R.id.home_hasimage); viewHolder.home_timestamp = (TextView) convertView.findViewById(R.id.home_timestamp); viewHolder.home_origtext = (TextView) convertView.findViewById(R.id.home_origtext); viewHolder.home_source = (TextView) convertView.findViewById(R.id.home_source); if(data!=null){ try { convertView.setTag(data.get("id")); //viewHolder.home_headicon.setImageDrawable(ImageUtil.getDrawableFromUrl(data.getString("head")+"/100"));//同步加载图片 viewHolder.home_nick.setText(data.getString("nick")); viewHolder.home_timestamp.setText(TimeUtil.converTime(Long.parseLong(data.getString("timestamp")))); //viewHolder.home_origtext.setText(data.getString("origtext"), TextView.BufferType.SPANNABLE); /*Spannable spannable = (Spannable)viewHolder.home_origtext.getText();//加高亮显示 spannable.setSpan(new BackgroundColorSpan(Color.RED), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);*/ SpannableString spannable = new SpannableString(data.getString("origtext")); //把字符串解析成本地表情 spannable = TextUtil.getImageSpannableString(spannable, RegexUtil.getStartAndEndIndex(data.getString("origtext"), Pattern.compile("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources()); viewHolder.home_origtext.setText(spannable); if(source!=null){ viewHolder.home_source.setText(source.getString("nick")+":"+source.getString("origtext")); viewHolder.home_source.setBackgroundResource(R.drawable.home_source_bg); } //异步加载图片 Drawable cachedImage = asyncImageLoader.loadDrawable(data.getString("head")+"/100",viewHolder.home_headicon, new ImageCallback(){ @Override public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl) { imageView.setImageDrawable(imageDrawable); } }); if (cachedImage == null) { viewHolder.home_headicon.setImageResource(R.drawable.icon); } else { viewHolder.home_headicon.setImageDrawable(cachedImage); } if(data.getJSONArray("image")!=null){ viewHolder.home_hasimage.setImageResource(R.drawable.hasimage); } } catch (JSONException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } return convertView; } } static class HomeViewHolder { private ImageView home_headicon; private TextView home_nick; private TextView home_timestamp; private TextView home_origtext; private TextView home_source; private ImageView home_hasimage; } @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position,long arg3) { CharSequence [] items = null; try { items= new CharSequence[]{"转播","对话","点评","收藏",((JSONObject)array.opt(position)).getString("nick"),"取消"}; } catch (JSONException e) { e.printStackTrace(); } new AlertDialog.Builder(HomeTimeLineActivity.this).setTitle("选项").setItems(items,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: { } break; case 1: { } break; case 2: { } break; case 3: { } break; case 4: { } break; case 5: { } break; default: break; } } }).show(); return false; } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { JSONObject weiboInfo = (JSONObject)array.opt(position); Intent intent = new Intent(HomeTimeLineActivity.this, WeiboDetailActivity.class); try { intent.putExtra("weiboid", weiboInfo.getString("id")); startActivity(intent); } catch (JSONException e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.home_timeline_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings: { } break; case R.id.menu_official: { } break; case R.id.menu_feedback: { } break; case R.id.menu_account: { Intent intent = new Intent(HomeTimeLineActivity.this, AccountActivity.class); startActivity(intent); } break; case R.id.menu_about: { Intent intent = new Intent(HomeTimeLineActivity.this, AddWeiboActivity.class); startActivity(intent); } break; case R.id.menu_quit: { } break; default: break; } return true; } }
下面的布局文件是你所看见的更多提示和下方的进度条布局文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="?android:listPreferredItemHeight"
- xmlns:android="http://schemas.android.com/apk/res/android">
- <TextView android:textSize="16.0sp" android:textColor="#ff545454" android:gravity="center" android:id="@id/tv_msg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="更多"/>
- <LinearLayout android:gravity="center" android:layout_gravity="center" android:orientation="horizontal" android:id="@id/loading" android:layout_width="fill_parent" android:layout_height="fill_parent">
- <ProgressBar android:layout_gravity="center_vertical" android:id="@id/footprogress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateBehavior="repeat" style="?android:progressBarStyleSmallInverse" />
- <TextView android:textColor="#ff000000" android:gravity="left|center" android:padding="3.0px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="读取中" />
- </LinearLayout>
- </LinearLayout>
- http://helloandroid.iteye.com/blog/1133545
发表评论
-
Android客户端代码保护技术-完整性校验
2018-01-08 17:10 1245由于Android系统固有的缺陷、Android应用分发 ... -
android开发中手动v2签名实现方法
2018-01-08 10:31 994用v2签名前要进行v1签名或zipalign。 1. z ... -
webview支持LocalStorage本地存储
2017-03-31 10:30 1354//允许JavaScript执行 ... -
七步配置phonegap+cordova+ionic开发环境
2016-12-19 16:21 687本文讲的是Android混合 ... -
梆梆加固破解
2016-10-13 09:01 1492本文假设你已经使用过梆梆加固,手头至少有个一个通过梆梆加固后 ... -
android zxing 扫描二维码 横屏转竖屏
2016-09-14 15:41 0Zxing 竖屏切换 Android 在google上下 ... -
封装Volley使Volley的每个请求都自动保存和发送Cookie
2016-09-14 10:57 0思路很简单,每次请求获取到服务器返回的response就解 ... -
Android二维码ZXing扫描区域大小的调整,提高扫描速度
2016-09-14 10:48 2633Zxing本身默认的扫图区域最大只有 360*480 ... -
解决Android二维码扫描ZXing竖屏拉伸变长闪退扫描区域小等问题
2016-09-14 10:42 1220Android 基于google Zxing实现二维码、条形 ... -
Android平台下利用zxing实现二维码开发
2016-09-14 09:25 472现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研 ... -
Zxing扫描二维码
2016-09-14 09:24 650摘要 android Zxing扫描二维码 横竖屏 ... -
Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
2016-09-14 09:18 495转载请注明出处:http://blog.csdn.net/x ... -
React Native应用部署/热更新-CodePush最新集成总结
2016-08-02 11:06 561本文出自《React Native学习笔记》系列文章。 ... -
让微信二维码扫描您的APK
2016-07-27 11:26 1488二维码深入人心,很多App都在官网挂出了可以扫描下载apk的 ... -
Activity类的runOnUiThread方法
2016-07-22 10:40 761[javascript] view plain c ... -
Can't create handler inside thread that has not called Looper.prepare()
2016-07-22 10:24 623错误信息:在Android开发中,如果在一个Thread中启 ... -
Android编程之解决android-support-v4打包问题
2016-07-21 09:27 545如果工程引入了android-support-v4的jar类 ... -
Android 编程下的代码混淆之(android-support-v4.jar)
2016-07-21 09:24 388项目在代码混淆过程中如果引用了第三方 Jar 包,需要在混淆 ... -
phoneGap可行性分析
2016-07-20 16:25 5081 移动应用现状 移动应用产品往往常 ... -
梆梆SDKs详细分析(1) - 防界面劫持SDK
2016-07-20 10:23 742前言 前段时间,国外知名的安全公司fireeye发 ...
相关推荐
Android腾讯微博客户端开发五利用FootView实现ListView滑动动态
这个微博客户端中用到得一些知识点。 1:sqllite数据库的应用 2:SharedPreferences结合sqllite保存默认登录用户 3:圆角背景,圆角头像,.9.png格式在android中的应用 4:布局方面的当然是最常用的ReleativeLayout,...
基于Android的新浪微博系统开发01-开发概述 基于Android的新浪微博系统开发02-下载微博sdk 基于Android的新浪微博系统开发03-微博客户端主架构 ...基于Android的新浪微博系统开发08-动态获取Icon和局部TextVieww
Android ListView 滑动分页 分页加载数据
android Listview下拉刷新 上拉(滑动分页)加载更多 高仿新浪微博下拉刷新,同时实现了滑动加载下一页
Android:利用EditText和ListView_实现动态信息检索
ListView动态加载数据分页,使用Handler+线程和AsyncTask两种方法
android ListView滑动分页加载和点击分页加载,以及复用convertView综合案例
listview实现动态加载数据,值得学习
这个微博客户端中用到得一些知识点。 1:sqllite数据库的应用 2:SharedPreferences结合sqllite保存默认登录用户 3:圆角背景,圆角头像,.9.png格式在android中的应用 4:布局方面的当然是最常用的ReleativeLayout,...
ListView每页加载10条数据,当滑动到页尾时自动加载下面的数据。
ListView 动态加载,滑动加载,源代码案例
android listView 分页加载
Listview实现分页加载
在EditText中输入信息,然后根据EditText中输入的信息再进行查找,将在ListView中显示查找结果,在LisTView中可以选择一项输入到EditText中。
Android实现ListView滑动删除实现了Android中的ListView滑动删除功能,亲测可用哦
ListView上拉加载下拉刷新升级版:滑动tab结合listView数据刷新
从这个星期开始,准备拿新浪微博开放平台做个实践,开发一个功能简单的android客户端,会尽可能的完善功能。 上图是这个客户端的主要界面。今天增加的功能。 1.简单的样式和皮肤,只是添加了按钮。 运行的系统是...
viewpage嵌套listview,效果:滑动listview删除,滑动非listview区域viewpage翻页
http://blog.csdn.net/icqapp/article/details/24978057 详看效果图...android listview左右滑动分页(viewpager嵌套listview进行分页),焦点图带圆焦点 先敬告学者:如在此项目上运行不了的直接找到本人QQ:508181017,