權限
<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();
}
}
}