网络判断+网络请求+TabLayout+XListview+多条目加载.
来源:互联网 发布:信天游炒股软件 编辑:程序博客网 时间:2024/05/22 00:31
示例图
添加权限
添加依赖库
xlistview
TabLayout的依赖
布局
主activity布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.sweek02.MainActivity"> <RadioGroup android:id="@+id/rel_navigate" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal"> <RadioButton android:id="@+id/rb_shouye" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/rb_selector" android:button="@null" android:checked="true" android:gravity="center" android:padding="3dp" android:text="首页" /> <RadioButton android:id="@+id/rb_xiangfa" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/rb_selector" android:button="@null" android:gravity="center" android:padding="3dp" android:text="想法" /> <RadioButton android:id="@+id/rb_shichang" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/rb_selector" android:button="@null" android:gravity="center" android:padding="3dp" android:text="市场" /> <RadioButton android:id="@+id/rb_tongzhi" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/rb_selector" android:button="@null" android:gravity="center" android:padding="3dp" android:text="通知" /> <RadioButton android:id="@+id/rb_gengduo" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/rb_selector" android:button="@null" android:gravity="center" android:padding="3dp" android:text="更多" /> </RadioGroup><FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/rel_navigate" android:id="@+id/fr" android:layout_marginTop="50dp" ></FrameLayout><EditText android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/ed" android:layout_alignParentTop="true" android:hint="搜索" /></RelativeLayout>
shouye布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="40dp" app:tabGravity="center" app:tabIndicatorColor="@color/colorAccent" app:tabMode="scrollable" app:tabSelectedTextColor="@color/colorPrimaryDark" app:tabTextColor="@color/colorPrimary" android:id="@+id/mytab"></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/vp"></android.support.v4.view.ViewPager></LinearLayout>
fragmens
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:textSize="30sp" android:textColor="#f0f" /></LinearLayout>
dongtai和faxian布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#f95" android:textSize="30dp" android:text="动态" /></LinearLayout>
remen布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"><com.example.sweek02.view.XListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/xlv" ></com.example.sweek02.view.XListView></LinearLayout>
多条目布局自己写
xlistview布局复制
Activity方法
public class MainActivity extends AppCompatActivity { private RadioGroup rg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rg = (RadioGroup) findViewById(R.id.rel_navigate); rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { switch (checkedId){ case R.id.rb_shouye: getSupportFragmentManager().beginTransaction().replace(R.id.fr,new Shouye()).commit(); break; case R.id.rb_xiangfa: addFragment("想法"); break; case R.id.rb_shichang: addFragment("市场"); break; case R.id.rb_tongzhi: addFragment("通知"); break; case R.id.rb_gengduo: addFragment("更多"); break; } } }); getSupportFragmentManager().beginTransaction().replace(R.id.fr,new Shouye()).commit(); } public void addFragment(String str){ Bundle bundle = new Bundle(); bundle.putString("key",str); Fragmens fragmens = new Fragmens(); fragmens.setArguments(bundle); getSupportFragmentManager().beginTransaction().replace(R.id.fr,fragmens).commit(); }}
shouyeFragment
public class Shouye extends Fragment { private ViewPager viewPager; private TabLayout tabLayout; private List<String> lists=new ArrayList<String>(); @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.shouye, container, false); viewPager = (ViewPager) v.findViewById(R.id.vp); tabLayout = (TabLayout) v.findViewById(R.id.mytab); //tab标题信息 intTabData(); //设置适配器 ,,得到子fragment的管理者,使用getChildFragmentManager viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); //建立关联 tabLayout.setupWithViewPager(viewPager); //指定加载的页数 http://blog.csdn.net/qq_29134495/article/details/51548002 viewPager.setOffscreenPageLimit(lists.size()); return v; } private void intTabData() { lists.add("动态"); lists.add("热门"); lists.add("发现"); } class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } //获取tab导航文本 @Override public CharSequence getPageTitle(int position) { return lists.get(position); } @Override public Fragment getItem(int position) { Fragment fragment =null; switch (position){ case 0: fragment = new Dongtai(); break; case 1: fragment = new Remen(); break; case 2: fragment = new Faxian(); break; default: break; } return fragment; } @Override public int getCount() { return lists.size(); } }}
Fragmens
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragmens, container, false); TextView tv = (TextView) v.findViewById(R.id.tv); Bundle bundle = getArguments(); tv.setText(bundle.getString("key")); return v; }
faixan和dongtai的布局
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.faxian, container, false); return v; }
复制xlistview代码导进去
remen
public class Remen extends Fragment { private List<Resulte.ResultsBean> list=new ArrayList<>(); private XListView xlv; private int page=1; private int type=1; private String url="http://gank.io/api/data/Android/10/"+page; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (type==1){ xlv.stopRefresh(); Date date=new Date(System.currentTimeMillis()); SimpleDateFormat format=new SimpleDateFormat("yyyy_MM_dd HH:mm:ss"); String format1 = format.format(date); xlv.setRefreshTime(format1); }if (type==2){ xlv.stopLoadMore(); } } }; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.remen, container, false); xlv = (XListView) v.findViewById(R.id.xlv); boolean result= NetTypeUtils.isConn(getActivity()); if(result){ //进行数据请求 inittype(); Toast.makeText(getActivity(),"有网络",Toast.LENGTH_SHORT).show(); }else{ NetTypeUtils.openNetSettingDg(getActivity()); Toast.makeText(getActivity(),"无网络",Toast.LENGTH_SHORT).show(); } xlv.setPullLoadEnable(true); xlv.setPullRefreshEnable(true); xlv.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() { type=1; page=1; inittype(); } @Override public void onLoadMore() { type=2; page++; inittype(); } }); return v; } public void inittype() { class MyTask extends AsyncTask<String, Void, String> { private String s = ""; @Override protected String doInBackground(String... params) { try { //1.创建URL URL url = new URL(params[0]); //2.打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //3.设置请求方法 connection.setRequestMethod("GET");//大写 connection.setConnectTimeout(2000); connection.setReadTimeout(2000); if (connection.getResponseCode() == 200) { InputStream stream = connection.getInputStream(); s = StreamToString.streamToStr(stream, "utf-8"); } } catch (IOException e) { e.printStackTrace(); } return s; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); Resulte resulte = gson.fromJson(s, Resulte.class); if (type==1){ list.clear(); list.addAll(resulte.getResults()); }else { list.addAll(resulte.getResults()); } xlv.setAdapter(new MyAdapter(getActivity(), list)); handler.sendEmptyMessageDelayed(0,1000); } } new MyTask().execute(url); }}
MyAdapter
public class MyAdapter extends BaseAdapter { private DisplayImageOptions options; Context context; private List<Resulte.ResultsBean> list; int TYTLE_ONLY = 0;//只有文字的形式 int IMAGE_LEFT = 1;//表示图片在左边,文字在右边 public MyAdapter(Context context, List<Resulte.ResultsBean> list) { this.context = context; this.list = list; options = new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片 .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时 .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片显示的色彩模式 .displayer(new RoundedBitmapDisplayer(20))//设置圆角图片 .build(); } @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 int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { List<String> pic = list.get(position).getImages(); if (pic == null) { return TYTLE_ONLY; } else if (pic != null && pic.size() == 1) {//集合长度是1 return IMAGE_LEFT;//返回图片类型){ } else { return TYTLE_ONLY; } } @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); if (type == IMAGE_LEFT) { ViewHolderi holderi; if (convertView == null) { holderi = new ViewHolderi(); convertView = View.inflate(context, R.layout.item_img, null); holderi.img_tv = (TextView) convertView.findViewById(R.id.img_tv); holderi.img = (ImageView) convertView.findViewById(R.id.img); convertView.setTag(holderi); } else { holderi = (ViewHolderi) convertView.getTag(); } holderi.img_tv.setText(list.get(position).getDesc()); ImageLoader.getInstance().displayImage(list.get(position).getImages().get(0), holderi.img, options); return convertView; } else if (type == TYTLE_ONLY) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(context, R.layout.item_tx, null); holder.tv = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv.setText(list.get(position).getDesc()); return convertView; } return convertView; } class ViewHolder{ TextView tv; } class ViewHolderi{ ImageView img; TextView img_tv; }}
bean类自己复制封住在首页中有接口.
MyApplication
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //sd卡上缓存目录-android指定的缓存路径 android/data/<package>/cache File cachefile=getExternalCacheDir(); //自定义的缓存路径// File cachefile=new File(Environment.getExternalStorageDirectory().getPath()+"/abc/a"); //进行框架初使化操作-全局配置 ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this) .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽 .threadPoolSize(2)//线程池的数量 .threadPriority(4) .memoryCacheSize(5*1024*1024)//设置内存缓存区大小 .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小 .diskCache(new UnlimitedDiscCache(cachefile))//自定义磁盘缓存目录 .writeDebugLogs()//打印日志内容 .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理 .build(); ImageLoader.getInstance().init(configuration); }}
阅读全文
0 0
- 网络判断+网络请求+TabLayout+XListview+多条目加载.
- handle发送get和post请求网络数据+多条目加载+banner+xlistview+TabLayout
- 动漫-无限轮播小圆点+判断网络+网络请求+多条目加载XListView+ImageLoader
- 无线轮播+GET网络请求数据+xlistview+多条目加载
- 判断网络状态 fragment隐藏显示 xlistview多条目加载数据
- ImageLoader+网络请求+ListView多条目加载
- listview多条目加载(网络请求)
- 封装请求网络数据 显示XListView 加多条目展示
- xlistview多条目加载
- XlistView多条目加载
- 权限,网络请求,判断,XlistVIew的依赖
- xlistview 网络请求+加载+分页方法
- 网络请求xml,xListView加载更新
- 网络判断+Fragment+ViewPager+XListView+TabLayout横向滑动菜单 Z2
- RecyclerView多条目加载(网络请求数据)
- XListView请求网络数据
- XListView请求网络数据
- XListView请求网络数据
- PCB没有VCC以及修改孔径方法
- Docker与OpenStack比较
- OKhttp二次封装工具类
- 【翻译】Web AppBuilder for ArcGIS的新增功能(2017年12月)
- 12.8省选总结
- 网络判断+网络请求+TabLayout+XListview+多条目加载.
- OKHttp封装
- 可变参数列表剖析
- 图像像素中通道概念解析
- RecycleView的使用
- 交换机、路由器 数据包转发
- C++连接两个字符串
- java--Demo2(购物)
- 12.08学习计划