android侧拉,上拉刷新,下拉加载

本博客详细介绍了在安卓应用中实现多种界面布局,包括ListView、GridView及上下拉刷新功能的方法。通过实例展示了如何使用ViewPager进行页面切换,RadioGroup进行选项卡选择,并结合DrawerLayout实现侧滑菜单。此外,还深入讲解了如何通过HTTP请求获取网络数据,并使用Gson进行JSON解析,最后将数据展示在自定义的多条目ListView中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先写网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

主页面布局(微信页面,1,多条目listview2,多条目gridview,3,多条目上拉,下拉)

 <android.support.v4.widget.DrawerLayout
        android:id="@+id/draw"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- 主界面 -->

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <android.support.v4.view.ViewPager
                android:id="@+id/pager"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_weight="1">

            </android.support.v4.view.ViewPager>

            <RadioGroup
                android:id="@+id/radioGroup"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <RadioButton
                    android:id="@+id/radio0"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:button="@null"
                    android:checked="true"
                    android:drawableTop="@drawable/selector_b"
                    android:gravity="center"
                    android:text="listview" />

                <RadioButton
                    android:id="@+id/radio1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:button="@null"
                    android:drawableTop="@drawable/selector_b"
                    android:gravity="center"
                    android:text="gridview" />

                <RadioButton
                    android:id="@+id/radio2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:button="@null"
                    android:drawableTop="@drawable/selector_b"
                    android:gravity="center"
                    android:text="上下拉" />

            </RadioGroup>

        </LinearLayout>

        <!-- 侧滑界面 -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="left"
            android:background="#ccc"
            android:orientation="vertical">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="侧滑按钮" />

            <ListView
                android:id="@+id/MList"
                android:layout_width="match_parent"
                android:layout_height="match_parent"></ListView>

        </LinearLayout>

    </android.support.v4.widget.DrawerLayout>

main-avtivity对应的代码

public class MainActivity extends FragmentActivity {

    private String str = "http://v.juhe.cn/joke/content/list.php?key=d8a4d2b6b72b88532f085b408e92717f&page=2&pagesize=10&sort=asc&time=1418745237";

    private ViewPager pager;
    private RadioGroup RadioGroup;
    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取控件id
        pager = findViewById(R.id.pager);
        RadioGroup = findViewById(R.id.radioGroup);
        listview = findViewById(R.id.MList);

        //侧拉
        DrawerLayout drawerLayout = findViewById(R.id.draw);
        drawerLayout.openDrawer(Gravity.LEFT);
        drawerLayout.closeDrawer(Gravity.LEFT);
        drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(@NonNull View view, float v) {

            }

            @Override
            public void onDrawerOpened(@NonNull View view) {

            }

            @Override
            public void onDrawerClosed(@NonNull View view) {

            }

            @Override
            public void onDrawerStateChanged(int i) {

            }
        });

        //创建fragment集合
        final ArrayList<Fragment> list = new ArrayList<Fragment>();
        FragListview fragListview = new FragListview();
        FragListview2 fragListview2 = new FragListview2();
        FragListview3 fragListview3 = new FragListview3();
        list.add(fragListview);
        list.add(fragListview2);
        list.add(fragListview3);

        pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int i) {
                return list.get(i);
            }

            @Override
            public int getCount() {
                return list.size();
            }
        });
        RadioGroup.check(RadioGroup.getChildAt(0).getId());
        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                RadioGroup.check(RadioGroup.getChildAt(i).getId());
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });

        RadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(android.widget.RadioGroup radioGroup, int i) {
                switch (i){
                    case R.id.radio0:
                        pager.setCurrentItem(0);
                        break;
                    case R.id.radio1:
                        pager.setCurrentItem(1);
                        break;
                    case R.id.radio2:
                        pager.setCurrentItem(2);
                        break;
                }
            }
        });
	}
    }

Httputil

public class HttpUtil {
    public static String requestHttpGet(String strUrl) {
        try {
            //设置url
            URL url = new URL(strUrl);
            //获取HttpURLConnection
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //设置为get请求
            connection.setRequestMethod("GET");
            //设置连接主机超时时间
            connection.setConnectTimeout(5000);
            //设置从主机读取数据超时
            connection.setReadTimeout(5000);
            //获取请求码(来判断网络请求是否正确)
            int code = connection.getResponseCode();
            //判断请求是否成功
            if (code == HttpURLConnection.HTTP_OK) {
                //如果数据请求成功,就获取数据
                InputStream stream = connection.getInputStream();
                //创建字符流
                BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"utf-8"));
                //拼接字符串
                StringBuilder builder = new StringBuilder();
                //把数据读取从成字符串
                String str = "";
                while ((str = reader.readLine()) != null){
                    //把一行行数据拼接成一行数据
                    builder.append(str);
                }
                //返回拼接后的数据
                return builder.toString();
            }
            //关闭连接
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
}

fragment布局

<ListView
        android:id="@+id/Flistview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>

fragment(导入gson依赖)

public class FragListview extends Fragment {

    private ListView listview;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//        return super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.fraglistview,container,false);
        listview = view.findViewById(R.id.Flistview);
        //解析网络数据
        new Thread(){
            @Override
            public void run() {
                super.run();
                String s = HttpUtil.requestHttpGet("https://api.apiopen.top/musicRankings");
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                List<JsonBean.ResultBean> list = jsonBean.getResult();
                Message message = new Message();
                message.what = 0;
                message.obj = list;
handler.sendMessage(message);
            }
        }.start();
        return view;
    }

        Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what){
                    case 0:
                        List<JsonBean.ResultBean> list = (List<JsonBean.ResultBean>) msg.obj;
                        //展示到listview上
                        listview.setAdapter(new MyListAdapter(list, getActivity()));
                        break;
                }

            }
        };

adapter布局(列表优化)

public class MyListAdapter extends BaseAdapter {

    private List<JsonBean.ResultBean>list;
    private Context context;

    public MyListAdapter(List<JsonBean.ResultBean> list, Context context) {
        this.list = list;
        this.context = context;
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

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

//多条目代码========================

    @Override
    public int getViewTypeCount() {//视图个数
        return 2;
    }

    @Override
    public int getItemViewType(int position) {//视图类型
        return position%2;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
       //根据类型加载不同视图
        switch (getItemViewType(i)){
            case 0:
                ViewHolder holder = null;
                if (view == null){
                    view = View.inflate(context, R.layout.list_adapter,null);
                    holder = new ViewHolder();
                    holder.textView = view.findViewById(R.id.Ltext);
                    holder.imageView = view.findViewById(R.id.Limage);
                    view.setTag(holder);
                }else{
                    holder = (ViewHolder) view.getTag();
                }
                JsonBean.ResultBean resultBean = list.get(i);
                holder.textView.setText(resultBean.getName());

                ImageLoader.getInstance().displayImage(resultBean.getPic_s192(),holder.imageView);
                break;
            case 1:
                ViewHolder2 holder2 = null;
                if (view == null){
                    view = View.inflate(context,R.layout.list_adapter2,null);
                    holder2 = new ViewHolder2();
                    holder2.textView2 = view.findViewById(R.id.Ltext2);
                    holder2.imageView2 = view.findViewById(R.id.Limage2);
                    view.setTag(holder2);
                }else{
                    holder2 = (ViewHolder2) view.getTag();
                }
                JsonBean.ResultBean resultBean1 = list.get(i);
                holder2.textView2.setText(resultBean1.getName());
                ImageLoader.getInstance().displayImage(resultBean1.getPic_s192(),holder2.imageView2);

                break;

        }

        return view;
    }
    class ViewHolder{
        TextView textView;
        ImageView imageView;
    }

    class ViewHolder2{
        TextView textView2;
        ImageView imageView2;
    }
}

APP(ImageLoader)

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        DisplayImageOptions options = new DisplayImageOptions.Builder().build();
        //设置imageloader
        ImageLoaderConfiguration loaderConfiguration = new ImageLoaderConfiguration.Builder(this)
            .defaultDisplayImageOptions(options)
                .build();
        //获取实例
        ImageLoader imageLoader = ImageLoader.getInstance();
        imageLoader.init(loaderConfiguration);

    }
}

gridview代码和listview相同
上下拉加载刷新
首先加载xlistview
fragment3布局(上下拉布局)

    <com.qy.xlistview.XListView
        android:id="@+id/xlistview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></com.qy.xlistview.XListView>

Httputils

public class HttpUtils {
    public static void httpAsyncTask(String strUrl, final CallBackString callBackString){
        new AsyncTask<String,Integer,String>(){

            @Override
            protected String doInBackground(String... strings) {
                return httpGet(strings[0]);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                callBackString.getData(s);
            }
        }.execute(strUrl);
    }

    public interface CallBackString{
        void getData(String s);
    }

    public static String httpGet(String strUrl){
        try {
            URL url = new URL(strUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);
//            int code = connection.getResponseCode();
            InputStream stream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"utf-8"));
            StringBuilder builder = new StringBuilder();
            String str = "";
            while ((str = reader.readLine())!=null){
                builder.append(str);
            }
            connection.disconnect();
            return  builder.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Bitmap GETimage(String string){
        try {
            URL url = new URL(string);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setReadTimeout(5000);
            connection.setConnectTimeout(5000);
            int code = connection.getResponseCode();
            if (code == HttpURLConnection.HTTP_OK){
                InputStream stream = connection.getInputStream();
                Bitmap bitmap = BitmapFactory.decodeStream(stream);
                return bitmap;
            }
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

fragment3代码

public class FragListview3 extends Fragment {

    private XListView xListView;
    private String str = "https://api.apiopen.top/musicRankings";
    private List<JsonBean.ResultBean> data;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//        return super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.fraglistview3, container, false);
        //获取控件di
        xListView = view.findViewById(R.id.xlistview);
        xListView.setPullLoadEnable(true);
        xListView.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() { //下拉刷新
                HttpUtils.httpAsyncTask(str, new HttpUtils.CallBackString() {

                    @Override
                    public void getData(String s) {
                        Gson gson = new Gson();
                        JsonBean bean = gson.fromJson(s, JsonBean.class);
                        data = bean.getResult();
                        MyListAdapter myListAdapter = new MyListAdapter(data,getActivity());
                        xListView.setAdapter(myListAdapter);
                        onload();
                    }
                });
            }

            @Override
            public void onLoadMore() { //上拉加载
                HttpUtils.httpAsyncTask(str, new HttpUtils.CallBackString() {
                    @Override
                    public void getData(String s) {
                        Gson gson = new Gson();
                        JsonBean bean = gson.fromJson(s, JsonBean.class);
                        List<JsonBean.ResultBean> list = bean.getResult();
                        data.addAll(list);
                        MyListAdapter myListAdapter = new MyListAdapter(FragListview3.this.data,getActivity());
                        xListView.setAdapter(myListAdapter);
                        onload();
                    }
                });
            }
        });

        HttpUtils.httpAsyncTask(str, new HttpUtils.CallBackString() {
            @Override
            public void getData(String s) {
                Gson gson = new Gson();
                JsonBean bean = gson.fromJson(s, JsonBean.class);
                data = bean.getResult();
                MyListAdapter myListAdapter = new MyListAdapter(data,getActivity());
                xListView.setAdapter(myListAdapter);
            }
        });
        return view;
    }

    public void onload(){
        xListView.stopRefresh();
        xListView.stopLoadMore();
        xListView.setRefreshTime("刷新");

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值