2024年Android最全安卓中PullToRefreshListview添加头部的方法,android界面开发教程

最后

我的面试经验分享可能不会去罗列太多的具体题目,因为我依然认为面试经验中最宝贵的不是那一个个具体的题目或者具体的答案,而是结束面试时,那一刻你的感受以及多天之后你的回味~

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    qiandao_no = (LinearLayout) headerView.findViewById(R.id.qiandao_no);





    list = list_out.getRefreshableView();

    list.setDividerHeight(0);// 隐藏listview默认的divider

    list.setSelector(android.R.color.transparent);// 隐藏listview默认的selector

    rightText.setVisibility(View.VISIBLE);

    rightText.setText(R.string.shuoming);

    rightText.setTextColor(0xffffffff);

    back.setOnClickListener(this);

    rightText.setOnClickListener(this);

    qiandao_frame.setOnClickListener(this);

    title.setText(R.string.myjifen);

    list.addHeaderView(headerView);

    list_out.setOnRefreshListener(this);

    list_out.setState(PullToRefreshBase.State.INIT_REFRESHING, true);

    PauseOnScrollListener listener = new PauseOnScrollListener(ImageLoader.getInstance(), false,

            true);

    list_out.setOnScrollListener(listener);

    adapter = new MyAdapter();

    list.setAdapter(adapter);





}





@Override

public void onPullDownToRefresh(PullToRefreshBase refreshView) {

    getItems(1);

}





@Override

public void onPullUpToRefresh(PullToRefreshBase refreshView) {

    getItems(currentPage + 1);

}





private void refreshComplete() {

    list_out.postDelayed(new Runnable() {

        @Override

        public void run() {

            list_out.onRefreshComplete();

        }

    }, 100);

}





@Override

protected void onDestroy() {

    super.onDestroy();

    ButterKnife.reset(this);

    NetworkHelper.getInstance().getRequestQueue().cancelAll(this);





}









@Override

public void onClick(View v) {

    switch (v.getId()) {

        case R.id.qiandao_frame:

            Utils.showToast("点击旋转动画");

            break;

        case R.id.back:

            finish();

            break;

        case R.id.right_text:

            Utils.showToast("跳到积分页面");

            break;

    }

}









private int totalPages = 0;

private int currentPage = 0;

private List<DiscoveryItem> items = new ArrayList<>();





private void getItems(final int page) {

    String url = NetworkConstants.ACTION_URL;

    Map<String, String> params = new LinkedHashMap<>();

    params.put("act", "credits_log");

    params.put("page", Integer.toString(page));

    GsonRequest<DiscoveryListResponse> request = new GsonRequest<>(url, Request.Method.POST,

            DiscoveryListResponse.class, true, params, new Response.Listener<DiscoveryListResponse>() {

        @Override

        public void onResponse(DiscoveryListResponse response) {

            if (response.isSuccess()) {

                if (page == 1 || page == 0) {

                    items.clear();

                }

                if (list_out != null) {

                    if (response.page == response.max_page) {

                        list_out.setMode(PullToRefreshBase.Mode.PULL_FROM_START);

                    } else {

                        list_out.setMode(PullToRefreshBase.Mode.BOTH);

                    }

                }

                Collections.addAll(items, response.data);

                adapter.notifyDataSetChanged();

                currentPage = response.page;

            } else {

                Utils.showToast(response.msg);

            }

            refreshComplete();

        }

    }, new Response.ErrorListener() {

        @Override

        public void onErrorResponse(VolleyError volleyError) {

            Utils.showToast(R.string.generic_failure);

            refreshComplete();

        }

    });

    NetworkHelper.getInstance().addToRequestQueue(request);

}









private MyAdapter adapter;





class MyAdapter extends BaseAdapter {





    @Override

    public int getCount() {

        return items.size();

    }





    @Override

    public Object getItem(int position) {

        return items.get(position);

    }





    @Override

    public long getItemId(int position) {

        return 0;

    }









    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder vh;

        View v = convertView;

        if (v == null) {

            v = getLayoutInflater().inflate(R.layout.item_jifen_list, parent, false);

            vh = new ViewHolder(v);

            v.setTag(vh);

        }

        final DiscoveryItem item = items.get(position);

        vh = (ViewHolder) v.getTag();

        vh.jifen_type.setText(item.message);

        vh.jifen_time.setText(Utils.getDateString(item.create_time));

        vh.jifen_num.setText("+" + item.value);

        return v;

    }

}





class ViewHolder {

    @InjectView(R.id.jifen_type)

    TextView jifen_type;





    @InjectView(R.id.jifen_time)

    TextView jifen_time;





    @InjectView(R.id.jifen_num)

    TextView jifen_num;





    ViewHolder(View view) {

        ButterKnife.inject(this, view);

    }

}

}


  

贴一下上面activity的布局文件



<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

          xmlns:tools="http://schemas.android.com/tools"

          android:layout_width="match_parent"

          android:layout_height="match_parent"

          android:background="@color/white"

          android:orientation="vertical">



<include

    android:id="@+id/header"

    layout="@layout/header"/>



<com.handmark.pulltorefresh.library.PullToRefreshListView

    android:id="@+id/list_out"

    xmlns:ptr="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:divider="@null"

    android:footerDividersEnabled="false"

    android:listSelector="@android:color/transparent"

    ptr:ptrHeaderTextColor="@color/gray4"

    ptr:ptrMode="both"

    tools:listitem="@layout/discovery_list_item"/>

  

  



  

  

二,在fragment中为PullToRefresh添加头  

  

package com.shitou.googleplay.ui.fragment;

import java.util.ArrayList;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import android.content.Intent;

import android.os.Handler;

import android.support.v4.view.ViewPager;

import android.text.TextUtils;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.LinearLayout.LayoutParams;

import android.widget.ListView;

import com.handmark.pulltorefresh.library.PullToRefreshBase;

import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;

import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;

import com.handmark.pulltorefresh.library.PullToRefreshListView;

import com.googleplay.R;

import com.shitou.googleplay.bean.AppInfo;

import com.shitou.googleplay.bean.Home;

import com.shitou.googleplay.http.HttpHelper;

import com.shitou.googleplay.http.Url;

import com.shitou.googleplay.ui.activity.AppDetailActivity;

import com.shitou.googleplay.ui.adapter.HomeAdapter;

import com.shitou.googleplay.ui.adapter.HomePagerAdapter;

import com.shitou.googleplay.util.CommonUtil;

import com.shitou.googleplay.util.JsonUtil;

import com.shitou.googleplay.util.LogUtil;

public class HomeFragment extends BaseFragment {

private PullToRefreshListView refreshListView;

private ViewPager homePager;

private HomeAdapter homeAdapter;

private ArrayList list = new ArrayList();

private ListView listView;

private HomePagerAdapter homePagerAdapter;

private Handler handler = new Handler(){

public void handleMessage(android.os.Message msg) {

homePager.setCurrentItem(homePager.getCurrentItem()+1);

handler.sendEmptyMessageDelayed(0, 3000);

};

};

@Override

protected View getSuccessView() {

initRefreshListView();//初始化PullToRefreshListView

initHeaderView();//添加头部的ViewPager

//设置Adapter

homeAdapter = new HomeAdapter(list);

listView.setAdapter(homeAdapter);

return refreshListView;

}

/**

  • 初始化PullToRefreshListView

*/

private void initRefreshListView() {

// 1.初始化refreshListView,并且给它设置刷新监听

refreshListView = (PullToRefreshListView) View.inflate(getActivity(),

R.layout.ptr_listview, null);

refreshListView.setMode(Mode.BOTH);// 设置两边都可以啦

refreshListView.setOnRefreshListener(new OnRefreshListener() {

/**

  • 上拉刷新和下拉加载更多都会执行该方法

  • @param refreshView

*/

@Override

public void onRefresh(PullToRefreshBase refreshView) {

if (refreshListView.getCurrentMode() == Mode.PULL_FROM_START) {

// 下拉刷新

CommonUtil.runOnUIThread(new Runnable() {

@Override

public void run() {

refreshListView.onRefreshComplete();// 完成刷新的方法

}

});

} else {

// 上拉加载更多,应该加载下一页的数据

contentPage.loadDataAndRefreshPage();

}

}

});

listView = refreshListView.getRefreshableView();

listView.setDividerHeight(0);// 隐藏listview默认的divider

listView.setSelector(android.R.color.transparent);// 隐藏listview默认的selector

//给listView增加item点击事件

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

// LogUtil.e(this, “position:”+position);

Intent intent = new Intent(getActivity(),AppDetailActivity.class);

intent.putExtra(“packageName”,list.get(position-2).getPackageName());

startActivity(intent);

}

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

【Android高级架构视频学习资源】

Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

startActivity(intent);

}

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
[外链图片转存中…(img-Y6ZPO1Af-1714886052185)]

【Android高级架构视频学习资源】

Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值