PullToRefreshListView今日头条初始页面
来源:互联网 发布:sql 数据挖掘分析 编辑:程序博客网 时间:2024/05/29 13:52
权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />//其余事项
library,Imager_Loader,Gson
<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" tools:context="com.example.fxf.lianshou.MainActivity"> <HorizontalScrollView android:id="@+id/hs" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/linearlayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"></LinearLayout> </HorizontalScrollView> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/hs"/></RelativeLayout>
ff.xml 相当于fragment01<com.handmark.pulltorefresh.library.PullToRefreshListView android:layout_width="match_parent" android:id="@+id/pulltorefresh" android:layout_height="match_parent"> </com.handmark.pulltorefresh.library.PullToRefreshListView>
layout.xml 相当于fragment02
<TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="123456789"/> <ImageView android:id="@+id/imageview" android:layout_width="80dp" android:layout_height="80dp" android:src="@mipmap/ic_launcher" />
BaseAppication.java
import android.app.Application;public class BaseApplication extends Application { @Override public void onCreate() { super.onCreate(); }}
App.java 需要在权限中:
<application android:name=".App"
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.core.download.BaseImageDownloader;public class App extends BaseApplication{ @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration config = new ImageLoaderConfiguration .Builder(this) // max width, max height,即保存的每个缓存文件的最大长宽 .memoryCacheExtraOptions(480, 800) //线程池内加载的数量 .threadPoolSize(5) .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现 .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) .memoryCacheSize(2 * 1024 * 1024) .tasksProcessingOrder(QueueProcessingType.LIFO) .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // connectTimeout (5 s), readTimeout (30 s)超时时间 .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) // Remove for release app .writeDebugLogs() //开始构建 .build(); //初始化imageloader; ImageLoader.getInstance().init(config); }}
Bean.java //解析Gson 通过Gson包自己解析
import java.util.List;public class Bean { private boolean error; private List<ResultsBean> results; public boolean isError() { return error; } public void setError(boolean error) { this.error = error; } public List<ResultsBean> getResults() { return results; } public void setResults(List<ResultsBean> results) { this.results = results; } public static class ResultsBean { private String _id; private String createdAt; private String desc; private String publishedAt; private String source; private String type; private String url; private boolean used; private String who; private List<String> images; public String get_id() { return _id; } public void set_id(String _id) { this._id = _id; } public String getCreatedAt() { return createdAt; } public void setCreatedAt(String createdAt) { this.createdAt = createdAt; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getPublishedAt() { return publishedAt; } public void setPublishedAt(String publishedAt) { this.publishedAt = publishedAt; } public String getSource() { return source; } public void setSource(String source) { this.source = source; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public boolean isUsed() { return used; } public void setUsed(boolean used) { this.used = used; } public String getWho() { return who; } public void setWho(String who) { this.who = who; } public List<String> getImages() { return images; } public void setImages(List<String> images) { this.images = images; } }}
Fragment1.java
import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;public class Fragment1 extends Fragment{ String TAG = "fxf"; private String url; private int page = 1; public static Fragment1 getins(String title){ Fragment1 fragment1 = new Fragment1(); Bundle bundle = new Bundle(); bundle.putString("title",title); fragment1.setArguments(bundle); return fragment1; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { Bundle arguments = getArguments(); //得到url //http://gank.io/api/data/Android/10/1 url = arguments.getString("title")+page; Log.e(TAG, "传递过来的url "+ url); TextView textView = new TextView(getActivity()); textView.setText(url); return textView; } @Override public void onResume() { super.onResume(); getNetData( 1); } //根据url获取网络数据; 解析给Listview,加上PullToRefresh; private void getNetData(int page) { // NetWorkUtil.getNetString(); } /** * 下啦, * 把集合清空,重新加载数据; */ /** * 上啦, * page++; * getNetData(page) * list.addall(); * adapter.setDataNotifyChanged(); * */}
NetWorkUtil.java
import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.Log;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class NetWorkUtil { private int responseCode; /** * 获取图片并返回; * @param urlString * @return */ public Bitmap getNetImage(String urlString){ try { //得到URL对象,这个对象可以打开连接 URL url = new URL(urlString); //打开连接,HttpURLConnection:是URLConnection的子类;子类的方法比较多;都用子类 HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); //服务器返回的状态码 int responseCode = urlConnection.getResponseCode(); //请求成功 if (responseCode == 200){ InputStream inputStream = urlConnection.getInputStream(); //BitmapFactory类封装了好多关于图片处理的方法; Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; }else { Log.e("wzq请求图片","responseCode:"+ responseCode); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 请求json字符串, * @param urlString url * @return json字符串 */ public static String getNetString(String urlString){ try { //得到URL对象,这个对象可以打开连接 URL url = new URL(urlString); //打开连接,HttpURLConnection:是URLConnection的子类;子类的方法比较多;都用子类 HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); //服务器返回的状态码 int responseCode = urlConnection.getResponseCode(); //请求成功 if (responseCode == 200){ InputStream inputStream = urlConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder stringBuilder = new StringBuilder(); String stringTemp = ""; while ((stringTemp = bufferedReader.readLine()) != null) { stringBuilder.append(stringTemp); } String result = stringBuilder.toString(); Log.e("wzq请求json", "result:" + result); return result; }else { Log.e("wzq","responseCode:"+ responseCode); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }}
MainActivity.java
import android.graphics.Color;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;import android.widget.TextView;import com.google.gson.Gson;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { String baseUrl = "http://gank.io/api/data/"; String[] titles = new String[]{"福利", "Android", "iOS", "休息视频", "拓展资源", "前端", "all"}; private HorizontalScrollView hs; private LinearLayout linearlayout; private ViewPager viewpager; private ArrayList<TextView> textViewList; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); String result = (String) msg.obj; parseData(result); } }; private void parseData(String result) { //Log.d("TAG",""+s); Gson gson = new Gson(); Bean bean = gson.fromJson(result, Bean.class); List<Bean.ResultsBean> results = bean.getResults(); textViewList = new ArrayList<TextView>(); for (int i = 0; i < results.size(); i++) { final TextView textView = new TextView(MainActivity.this); textView.setText(results.get(i).getType() + i); textView.setTextSize(20); textView.setId(i + 1000); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int id = view.getId(); viewpager.setCurrentItem(id - 1000); } }); if (i == 0) { textView.setTextColor(Color.RED); } else { textView.setTextColor(Color.BLACK); } LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(20, 10, 20, 10); //添加到布局中 linearlayout.addView(textView, layoutParams); //添加到集合 textViewList.add(textView); viewpager.setAdapter(new MAdapter(getSupportFragmentManager())); viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { for (int i = 0; i < textViewList.size(); i++) { if (position == i) { textViewList.get(i).setTextColor(Color.RED); } else { textViewList.get(i).setTextColor(Color.BLACK); } //获取当前的textview TextView textView = textViewList.get(position); //width是每次滑动的距离 int width = textView.getWidth(); //让scrollView滑动 滑动距离是textview之间的间距 hs.scrollTo(width * position, 0); } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); hs = (HorizontalScrollView) findViewById(R.id.hs); linearlayout = (LinearLayout) findViewById(R.id.linearlayout); viewpager = (ViewPager) findViewById(R.id.viewpager); new Thread() { @Override public void run() { super.run(); String result = NetWorkUtil.getNetString("http://gank.io/api/data/Android/10/1"); Message message = handler.obtainMessage(); message.obj = result; handler.sendMessage(message); } }.start(); } class MAdapter extends FragmentPagerAdapter { public MAdapter(FragmentManager fm) { super(fm); } /* * 如何向Fragment中传递url, * */ @Override public Fragment getItem(int position) { ////提交的数据需要进行URL编码,字母和数字编码后都不变// String path = "http://192.168.252.1:8080/web/LoginServlet?name="+ URLEncoder.encode(name)+"&password="+pass; return Fragment1.getins(baseUrl + titles[position] + "/10/1"); } @Override public int getCount() { return textViewList.size(); } }}
阅读全文
0 0
- PullToRefreshListView今日头条初始页面
- PullToRefreshListView今日头条初始页面 补充
- 类似今日头条(侧拉+viewloder+PullToRefreshListView+viewpager无限轮播)
- 今日头条算法
- 面试-今日头条
- 今日头条
- 今日头条
- 今日头条
- 今日头条面试
- 今日头条导航
- 仿今日头条
- 今日头条笔试
- 今日头条面试
- 今日头条效果
- 模拟今日头条
- 今日头条模拟
- 今日头条
- 今日头条
- 最简单的基于FFMPEG的推流器附件:收流器
- iphone X 适配
- 前端MVC,JS模板替换实现原理
- 各种池---内存池的高效实现(C语言)
- 关于数据库表时间字段问题
- PullToRefreshListView今日头条初始页面
- 【Unity】Unity3D 移获取手机电量与wifi信号的获取
- 最新使用 Data Binding
- openwrt下EC20_R2.0使用GPS功能
- java面试
- 关于手机地图api【百度/高德/百度转高德】
- H5常用标签
- 编码习惯之异常处理
- opengles图像处理之平滑过滤