二级列表ExpendableListView实现从网络上获取数据
来源:互联网 发布:正方软件叶青松 编辑:程序博客网 时间:2024/05/02 08:48
二级列表ExpendableListView实例
效果如下图所示:
获取数据地址:url:http://www.handybest.com/index.php?m=Wx&c=Index&a=get_topic_info&id=34&view=
(个人使用 禁止商业使用)
1.首先创建二级列表的JavaBean类 ;
2.访问网址请求数据,使用Gson解析json串,代码如下:
package com.example.aa;import android.util.Log;import com.google.gson.Gson;import com.google.gson.JsonSyntaxException;import java.io.BufferedInputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.Scanner;public class ExUtils { private static final String TAG_GET = "exutils--->"; public static String connectGet() { HttpURLConnection urlConnection = null; try { URL url = new URL("http://www.handybest.com/index.php?m=Wx&c=Index&a=get_topic_info&id=34&view="); urlConnection = (HttpURLConnection) url.openConnection(); InputStream in = new BufferedInputStream(urlConnection.getInputStream()); // 判断请求是否成功 if (urlConnection.getResponseCode() == 200) {// // 获取返回的数据// byte[] data = readStream(urlConnection.getInputStream());// Log.i(TAG_GET, "Get方式请求成功,返回数据如下:");// Log.i(TAG_GET, new String(data, "UTF-8"));// return new String(data, "UTF-8"); return readInStreams(in); } else { Log.i(TAG_GET, "Get方式请求失败"); } } catch (Exception e) { e.printStackTrace(); } finally { urlConnection.disconnect(); } return null; } private static String readInStreams(InputStream in) { Scanner scanner = new Scanner(in).useDelimiter("\\A"); return scanner.hasNext() ? scanner.next() : ""; } /*** * Gson 解析数据 */ public static LcBean gsonData() { LcBean lcBean = null; try { String strContent = connectGet(); Gson gson = new Gson(); lcBean = gson.fromJson(strContent, LcBean.class); return lcBean; } catch (JsonSyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }}
3.最重要的功能块出现,实现一级列表,二级列表数据的添加:
1)为一级列表添加数据方法:
public List<DetailsBean> detailsList= ExUtils.gsonData().getData().getDetails(); public ArrayList<String> getGeneralsTypes(){ ArrayList<String> generalsTypes=new ArrayList<String>(); for(int i=0;i<detailsList.size();i++){ generalsTypes.add(detailsList.get(i).getTag_title()); } return generalsTypes; } private ArrayList<String> generalsTypes=getGeneralsTypes();
2)为二级列表添加数据
public ArrayList<ArrayList<DetailsBean.PictBean>> getGenerals(){ // Objects[][] objectsesGener=new Objects[detailsList.size()][]; ArrayList<ArrayList<DetailsBean.PictBean>> generalss = new ArrayList<ArrayList<DetailsBean.PictBean>>(); for (int i=0;i<detailsList.size();i++){ DetailsBean detailsBean = detailsList.get(i); List<DetailsBean.PictBean> pict = detailsBean.getPict(); ArrayList<DetailsBean.PictBean> dpict=new ArrayList<DetailsBean.PictBean>(); for (int j=0;j<pict.size();j++){ dpict.add(pict.get(j)); } generalss.add(dpict); } Log.i("exutils---2>",generalss.toString()); return generalss; } private ArrayList<ArrayList<DetailsBean.PictBean>> generals=getGenerals();
4.ExpandableListAdapter中的实现如下:
final ExpandableListAdapter adapter = new BaseExpandableListAdapter() { //设置组视图的图片// int[] logos = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher,R.drawable.ic_launcher}; // private String [][] generals=ExUtils.getItemChild(); //子视图图片 /*public int[][] generallogos = new int[][] { { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher }, { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher }, { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher } };*/ public List<DetailsBean> detailsList= ExUtils.gsonData().getData().getDetails(); /**一级列表数据**/ public ArrayList<String> getGeneralsTypes(){ ArrayList<String> generalsTypes=new ArrayList<String>(); for(int i=0;i<detailsList.size();i++){ generalsTypes.add(detailsList.get(i).getTag_title()); } return generalsTypes; } private ArrayList<String> generalsTypes=getGeneralsTypes(); /**二级列表数据**/ public ArrayList<ArrayList<DetailsBean.PictBean>> getGenerals(){ // Objects[][] objectsesGener=new Objects[detailsList.size()][]; ArrayList<ArrayList<DetailsBean.PictBean>> generalss = new ArrayList<ArrayList<DetailsBean.PictBean>>(); for (int i=0;i<detailsList.size();i++){ DetailsBean detailsBean = detailsList.get(i); List<DetailsBean.PictBean> pict = detailsBean.getPict(); ArrayList<DetailsBean.PictBean> dpict=new ArrayList<DetailsBean.PictBean>(); for (int j=0;j<pict.size();j++){ dpict.add(pict.get(j)); } generalss.add(dpict); } Log.i("exutils---2>",generalss.toString()); return generalss; } private ArrayList<ArrayList<DetailsBean.PictBean>> generals=getGenerals(); //自己定义一个获得文字信息的方法 TextView getTextView() { AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); TextView textView = new TextView( MainActivity.this); textView.setLayoutParams(lp); textView.setGravity(Gravity.CENTER_VERTICAL); textView.setPadding(36, 0, 0, 0); textView.setTextSize(20); textView.setTextColor(Color.BLACK); return textView; } //重写ExpandableListAdapter中的各个方法 @Override public int getGroupCount() { // TODO Auto-generated method stub return generalsTypes.size(); } @Override public Object getGroup(int groupPosition) { // TODO Auto-generated method stub return generalsTypes.get(groupPosition); } @Override public long getGroupId(int groupPosition) { // TODO Auto-generated method stub return groupPosition; } @Override public int getChildrenCount(int groupPosition) { // TODO Auto-generated method stub return generals.get(groupPosition).size(); } @Override public DetailsBean.PictBean getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return generals.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { // TODO Auto-generated method stub return childPosition; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LinearLayout ll = new LinearLayout( MainActivity.this);// ll.setOrientation(0); ImageView logo = new ImageView(MainActivity.this);// logo.setImageResource(logos[groupPosition]); logo.setPadding(50, 0, 0, 0); ll.addView(logo); TextView textView = getTextView(); textView.setTextColor(Color.BLACK); textView.setText(getGroup(groupPosition).toString()); ll.addView(textView); return ll; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LinearLayout ll = new LinearLayout( MainActivity.this);// ll.setOrientation(0);// ImageView generallogo = new ImageView(// MainActivity.this);// generallogo// .setImageResource(generallogos[groupPosition][childPosition]);// ll.addView(generallogo); TextView textView = getTextView(); textView.setText(getChild(groupPosition, childPosition).getContent()); ll.addView(textView); Log.i("exutils---1>","groupPosition+childPosition=["+groupPosition+","+childPosition+"]"); Log.i("exutils---1>",getChild(groupPosition, childPosition).getContent()); return ll; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return true; } };
- 最后在MainActivity中将数据添加到视图view上显示出来:
ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.list); expandableListView.setAdapter(adapter); //设置item点击的监听器 expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText( MainActivity.this, "你点击了" + adapter.getChild(groupPosition, childPosition), Toast.LENGTH_SHORT).show(); return false; } }); }
代码下载地址:点我
1 0
- 二级列表ExpendableListView实现从网络上获取数据
- 二级列表数据从网络请求数据
- 从网络上获取数据
- android端获取网络数据添加到二级列表ExpandableListView
- 二级列表展示网络数据
- 使用RecycleView实现动态获取数据展开二级列表展示
- iOS总结(从网络上获取数据)
- 从网络获取json后实现新闻列表界面
- OkHttp请求网络数据二级列表实现购物车全选,单选,总价
- MVP+OKhttp+拦截器+RecyclerView+自定义view 实现请求网络数据的二级列表购物车
- 从网络获取数据
- Java 网络 URL 从网页上获取数据
- JAVA 网络 URL 从网页上获取数据 二
- 从网络获取数据,并绑定到listview上
- jsp下拉框从数据库获取数据进行填充并且实现二级级联
- OKhttp+Gson实现从网络上获取最新新闻
- 从网络上获取图片
- 二级列表展示网络请求到的数据
- 深入理解php底层:php生命周期
- Mybatis 多个参数传递解决方案
- Unsafe
- Greedy Reluctant Possessive区别
- short驱动详解
- 二级列表ExpendableListView实现从网络上获取数据
- MySQL 基础(一)
- Spring声明式事务配置文件
- uva 11297 Census
- 网络通信
- DocumentBuilder.parse的问题。
- 设计模式 (5)类图二
- 职场新人的心灵汤药
- Linux学习之CentOS(一)--CentOS7环境搭建