author) {
+ this.author = author;
+ }
+
+ public String getPubdate() {
+ return pubdate;
+ }
+
+ public void setPubdate(String pubdate) {
+ this.pubdate = pubdate;
+ }
+
+ public String getOrigin_title() {
+ return origin_title;
+ }
+
+ public void setOrigin_title(String origin_title) {
+ this.origin_title = origin_title;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+
+ public String getCatalog() {
+ return catalog;
+ }
+
+ public void setCatalog(String catalog) {
+ this.catalog = catalog;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public BookBean.Images getImages() {
+ return images;
+ }
+
+ public void setImages(BookBean.Images images) {
+ this.images = images;
+ }
+
+ public String getPublisher() {
+ return publisher;
+ }
+
+ public void setPublisher(String publisher) {
+ this.publisher = publisher;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getAuthor_intro() {
+ return author_intro;
+ }
+
+ public void setAuthor_intro(String author_intro) {
+ this.author_intro = author_intro;
+ }
+
+ public String getSummary() {
+ return summary;
+ }
+
+ public void setSummary(String summary) {
+ this.summary = summary;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getIsbn10() {
+ return isbn10;
+ }
+
+ public void setIsbn10(String isbn10) {
+ this.isbn10 = isbn10;
+ }
+
+ public String getIsbn13() {
+ return isbn13;
+ }
+
+ public void setIsbn13(String isbn13) {
+ this.isbn13 = isbn13;
+ }
+
+
+ public class Rating {
+ private float max;
+ private int numRaters;
+ private float average;
+ private float min;
+
+ public float getMax() {
+ return max;
+ }
+
+ public void setMax(float max) {
+ this.max = max;
+ }
+
+ public int getNumRaters() {
+ return numRaters;
+ }
+
+ public void setNumRaters(int numRaters) {
+ this.numRaters = numRaters;
+ }
+
+ public float getAverage() {
+ return average;
+ }
+
+ public void setAverage(float average) {
+ this.average = average;
+ }
+
+ public float getMin() {
+ return min;
+ }
+
+ public void setMin(float min) {
+ this.min = min;
+ }
+ }
+
+ public class Images {
+ private String small;
+ private String large;
+ private String medium;
+
+ public String getSmall() {
+ return small;
+ }
+
+ public void setSmall(String small) {
+ this.small = small;
+ }
+
+ public String getLarge() {
+ return large;
+ }
+
+ public void setLarge(String large) {
+ this.large = large;
+ }
+
+ public String getMedium() {
+ return medium;
+ }
+
+ public void setMedium(String medium) {
+ this.medium = medium;
+ }
+ }
+
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/constants/Apis.java b/app/src/main/java/ren/solid/materialdesigndemo/constants/Apis.java
new file mode 100644
index 0000000..155ab40
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/constants/Apis.java
@@ -0,0 +1,43 @@
+package ren.solid.materialdesigndemo.constants;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:14:02
+ *
+ *
+ * 本Demo使用的api全部来源:豆瓣
+ *
+ * https://developers.douban.com/
+ */
+public class Apis {
+ /**
+ * 图书搜索
+ *
+ * q 查询关键字 q和tag必传其一
+ * tag 查询的tag q和tag必传其一
+ * start 取结果的offset 默认为0
+ * count 取结果的条数 默认为20,最大为100
+ */
+ public static String SearchBookApi = "https://api.douban.com/v2/book/search";
+
+ /**
+ * 请求格式: http://api.douban.com/v2/book/26637801
+ */
+ public static String GetBookInfoApi = "http://api.douban.com/v2/book";
+
+ /**
+ * 正在热映的电影
+ */
+ public static String MovieInTheaters = "http://api.douban.com/v2/movie/in_theaters";
+
+ /**
+ * q query string str Y Y Y -
+ * tag tag query string str Y Y Y -
+ * start start int Y Y Y 0
+ * count count int Y Y Y 20
+ *
+ * Example:GET /v2/movie/search?q=张艺谋 GET /v2/movie/search?tag=喜剧
+ */
+ public static String MovieSearch = "http://api.douban.com/v2/movie/search";
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/fragment/AboutFragment.java b/app/src/main/java/ren/solid/materialdesigndemo/fragment/AboutFragment.java
new file mode 100644
index 0000000..8030454
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/fragment/AboutFragment.java
@@ -0,0 +1,59 @@
+package ren.solid.materialdesigndemo.fragment;
+
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ProgressBar;
+
+import ren.solid.materialdesigndemo.R;
+import ren.solid.materialdesigndemo.fragment.base.BaseFragment;
+import ren.solid.materialdesigndemo.fragment.base.WebViewFragment;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:20:03
+ */
+public class AboutFragment extends WebViewFragment {
+ private ProgressBar mProgressBar;
+
+ @Override
+ protected View setContentView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(R.layout.fragment_blog, container, false);
+ }
+
+ @Override
+ protected void initView() {
+ mProgressBar = (ProgressBar) getContentView().findViewById(R.id.progressbar);
+ mWebView = (WebView) getContentView().findViewById(R.id.webView);
+ mWebView.loadUrl("file:///android_asset/about.htm");
+ mWebView.setWebViewClient(new MyWebViewClient());
+ mWebView.setWebChromeClient(new MyWebChromeClient());
+ mProgressBar.setMax(100);
+ }
+
+ class MyWebViewClient extends WebViewClient {
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ view.loadUrl(url);
+ return true;
+ }
+ }
+
+ class MyWebChromeClient extends WebChromeClient {
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+ Log.e("onProgressChanged", newProgress + "");
+ mProgressBar.setProgress(newProgress);
+ if (newProgress == 100) {
+ mProgressBar.setVisibility(View.GONE);
+ } else {
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/fragment/BlogFragment.java b/app/src/main/java/ren/solid/materialdesigndemo/fragment/BlogFragment.java
new file mode 100644
index 0000000..6570f74
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/fragment/BlogFragment.java
@@ -0,0 +1,62 @@
+package ren.solid.materialdesigndemo.fragment;
+
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.BaseAdapter;
+import android.widget.ProgressBar;
+
+import ren.solid.materialdesigndemo.R;
+import ren.solid.materialdesigndemo.fragment.base.BaseFragment;
+import ren.solid.materialdesigndemo.fragment.base.WebViewFragment;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:17:46
+ */
+public class BlogFragment extends WebViewFragment {
+
+ private ProgressBar mProgressBar;
+
+ @Override
+ protected View setContentView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(R.layout.fragment_blog, container, false);
+ }
+
+ @Override
+ protected void initView() {
+ mProgressBar = (ProgressBar) getContentView().findViewById(R.id.progressbar);
+ mWebView = (WebView) getContentView().findViewById(R.id.webView);
+ mWebView.loadUrl("http://www.jianshu.com/users/6725c8e8194f/");
+ mWebView.setWebViewClient(new MyWebViewClient());
+ mWebView.setWebChromeClient(new MyWebChromeClient());
+ mProgressBar.setMax(100);
+ }
+
+ class MyWebViewClient extends WebViewClient {
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ view.loadUrl(url);
+ return true;
+ }
+ }
+
+ class MyWebChromeClient extends WebChromeClient {
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+ Log.e("onProgressChanged", newProgress + "");
+ mProgressBar.setProgress(newProgress);
+ if (newProgress == 100) {
+ mProgressBar.setVisibility(View.GONE);
+ } else {
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+ }
+ }
+
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/fragment/BookFragment.java b/app/src/main/java/ren/solid/materialdesigndemo/fragment/BookFragment.java
new file mode 100644
index 0000000..f1ffe42
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/fragment/BookFragment.java
@@ -0,0 +1,196 @@
+package ren.solid.materialdesigndemo.fragment;
+
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.widget.LinearLayoutManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.jcodecraeer.xrecyclerview.XRecyclerView;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import ren.solid.materialdesigndemo.R;
+import ren.solid.materialdesigndemo.adapter.BookAdapter;
+import ren.solid.materialdesigndemo.bean.BookBean;
+import ren.solid.materialdesigndemo.constants.Apis;
+import ren.solid.materialdesigndemo.fragment.base.BaseFragment;
+import ren.solid.materialdesigndemo.utils.SolidHttpUtils;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:11:54
+ */
+public class BookFragment extends BaseFragment implements View.OnClickListener {
+
+ private static final String TAG = "BookFragmentTAG";
+ private static final int ACTION_INIT = 0;
+ private static final int ACTION_REFLESH = 1;
+ private static final int ACTION_LOAD_MORE = 2;
+
+
+ private XRecyclerView mRecyclerView;
+ private BookAdapter mBookAdapter;
+ private FloatingActionButton mFABSearch;
+ private EditText mETInput;
+ private AlertDialog mInputDialog;
+
+ private int mCurrentAction = ACTION_INIT;
+ private String mCurrentKeyWord;
+ private int mPageSize = 20;
+ private int mCurrentPageIndex = 1;
+
+
+ @Override
+ protected View setContentView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(R.layout.fragment_book, container, false);
+ }
+
+ @Override
+ protected void initView() {
+ mFABSearch = (FloatingActionButton) getContentView().findViewById(R.id.fab_search);
+ LinearLayoutManager LayoutManager = new LinearLayoutManager(getContext());
+ mRecyclerView = (XRecyclerView) getContentView().findViewById(R.id.recyclerview);
+ mBookAdapter = new BookAdapter(getMContext(), new ArrayList());
+ mRecyclerView.setAdapter(mBookAdapter);
+ mRecyclerView.setLayoutManager(LayoutManager);
+ mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
+ @Override
+ public void onRefresh() {
+ switchAction(ACTION_REFLESH);
+ }
+
+ @Override
+ public void onLoadMore() {
+ switchAction(ACTION_LOAD_MORE);
+ }
+ });
+
+ mFABSearch.setOnClickListener(this);
+ initInputDialog();
+ }
+
+ @Override
+ protected void initData() {
+ String[] keyWords = {"Android", "文艺青年", "科技", ".NET", "创业之路"};
+ Random random = new Random();
+ int n = random.nextInt(keyWords.length);
+ mCurrentKeyWord = keyWords[n];
+ switchAction(ACTION_INIT);
+
+ }
+
+ private void getData() {
+ String reqUrl = Apis.SearchBookApi + "?q=" + mCurrentKeyWord + "&start=" + (mCurrentPageIndex - 1) * mPageSize +
+ "&count=" + mPageSize;
+ SolidHttpUtils.getInstance().loadString(reqUrl, new SolidHttpUtils.HttpCallBack() {
+ @Override
+ public void onLoading() {
+ if (mCurrentAction == ACTION_INIT)
+ getProgressDialog().show();
+ }
+
+ @Override
+ public void onSuccess(String result) {
+ getProgressDialog().hide();
+ try {
+ JSONObject jsonObject = new JSONObject(result);
+ Gson gson = new Gson();
+ List list = gson.fromJson(
+ jsonObject.getString("books"),
+ new TypeToken>() {
+ }.getType());
+
+ mBookAdapter.addAll(list);
+ mRecyclerView.refreshComplete();
+ if (mCurrentAction == ACTION_LOAD_MORE)
+ mRecyclerView.loadMoreComplete();
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onError(Exception e) {
+ getProgressDialog().hide();
+ System.out.println("onError:" + e);
+ }
+ });
+ }
+
+ private void switchAction(int action) {
+ mCurrentAction = action;
+ switch (mCurrentAction) {
+ case ACTION_INIT:
+ mBookAdapter.clear();
+ mCurrentPageIndex = 1;
+ break;
+ case ACTION_REFLESH:
+ mBookAdapter.clear();
+ mCurrentPageIndex = 1;
+ break;
+ case ACTION_LOAD_MORE:
+ mCurrentPageIndex++;
+ break;
+ }
+ getData();
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.fab_search:
+ mInputDialog.show();
+ break;
+ default:
+ break;
+ }
+ }
+
+ /***
+ * 初始化输入对框框
+ */
+ private void initInputDialog() {
+ mETInput = new EditText(getMContext());
+ AlertDialog.Builder builder = new AlertDialog.Builder(getMContext());
+ builder.setTitle("请输入关键字");
+ builder.setView(mETInput);
+ builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+
+ mCurrentKeyWord = mETInput.getText().toString();
+ if ("".equals(mCurrentKeyWord)) {//如果用户输入的关键字为空,我们就按照最开始的数据加载方式加载
+ initData();
+ } else {
+ switchAction(ACTION_INIT);
+ }
+ mETInput.setText("");
+
+ }
+ });
+ builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mETInput.setText("");
+ }
+ });
+ mInputDialog = builder.create();
+
+ }
+
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/fragment/MainFragment.java b/app/src/main/java/ren/solid/materialdesigndemo/fragment/MainFragment.java
new file mode 100644
index 0000000..2d994f0
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/fragment/MainFragment.java
@@ -0,0 +1,52 @@
+package ren.solid.materialdesigndemo.fragment;
+
+import android.support.design.widget.TabLayout;
+import android.support.v4.view.ViewPager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import ren.solid.materialdesigndemo.R;
+import ren.solid.materialdesigndemo.adapter.CatViewPagerAdapter;
+import ren.solid.materialdesigndemo.fragment.base.BaseFragment;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:11:29
+ */
+public class MainFragment extends BaseFragment{
+
+ private TabLayout mTabLayout;
+ private ViewPager mViewPager;
+
+
+
+ @Override
+ protected View setContentView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(R.layout.fragment_main, container, false);
+ }
+
+ @Override
+ protected void initView() {
+ mTabLayout = (TabLayout) getContentView().findViewById(R.id.sliding_tabs);
+ mViewPager = (ViewPager) getContentView().findViewById(R.id.viewpager);
+
+
+ List titles = new ArrayList<>();
+ titles.add("找书籍");
+ titles.add("找电影");
+
+ CatViewPagerAdapter viewPagerAdapter = new CatViewPagerAdapter(getMContext(), titles, getFragmentManager());
+ mViewPager.setAdapter(viewPagerAdapter);
+
+ mTabLayout.addTab(mTabLayout.newTab().setText("读书"));
+ mTabLayout.addTab(mTabLayout.newTab().setText("电影"));
+ mTabLayout.setupWithViewPager(mViewPager);
+
+
+ }
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/fragment/MovieFragment.java b/app/src/main/java/ren/solid/materialdesigndemo/fragment/MovieFragment.java
new file mode 100644
index 0000000..b208a02
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/fragment/MovieFragment.java
@@ -0,0 +1,26 @@
+package ren.solid.materialdesigndemo.fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import ren.solid.materialdesigndemo.R;
+import ren.solid.materialdesigndemo.fragment.base.BaseFragment;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:11:54
+ */
+public class MovieFragment extends BaseFragment {
+
+ @Override
+ protected View setContentView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(R.layout.fragment_movie, container, false);
+ }
+
+ @Override
+ protected void initView() {
+ super.initView();
+ }
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/fragment/StringFragment.java b/app/src/main/java/ren/solid/materialdesigndemo/fragment/StringFragment.java
new file mode 100644
index 0000000..646770d
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/fragment/StringFragment.java
@@ -0,0 +1,34 @@
+package ren.solid.materialdesigndemo.fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import ren.solid.materialdesigndemo.R;
+import ren.solid.materialdesigndemo.fragment.base.BaseFragment;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:21:43
+ */
+public class StringFragment extends BaseFragment {
+ private String mText;
+ private TextView mTvText;
+
+ @Override
+ protected View setContentView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(R.layout.fragment_string, container, false);
+ }
+
+ @Override
+ protected void initView() {
+ mText = getArguments().getString("text");
+ mTvText = (TextView) getContentView().findViewById(R.id.tv_text);
+ if (!mText.equals(""))
+ mTvText.setText(mText);
+ else
+ mTvText.setText("暂无信息");
+ }
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/fragment/base/BaseFragment.java b/app/src/main/java/ren/solid/materialdesigndemo/fragment/base/BaseFragment.java
new file mode 100644
index 0000000..0ed764d
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/fragment/base/BaseFragment.java
@@ -0,0 +1,59 @@
+package ren.solid.materialdesigndemo.fragment.base;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:11:30
+ */
+public abstract class BaseFragment extends Fragment {
+
+ private View mContentView;
+ private Context mContext;
+ private ProgressDialog mProgressDialog;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ mContentView = setContentView(inflater, container);
+ mContext = getContext();
+ mProgressDialog = new ProgressDialog(getMContext());
+ init();
+ initView();
+ initData();
+ return mContentView;
+ }
+
+ protected void initData() {
+
+ }
+
+ protected void init() {
+
+ }
+
+ protected void initView() {
+ }
+
+ protected abstract View setContentView(LayoutInflater inflater, ViewGroup container);
+
+ protected View getContentView() {
+ return mContentView;
+ }
+
+ public Context getMContext() {
+ return mContext;
+ }
+
+ protected ProgressDialog getProgressDialog() {
+ return mProgressDialog;
+ }
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/fragment/base/WebViewFragment.java b/app/src/main/java/ren/solid/materialdesigndemo/fragment/base/WebViewFragment.java
new file mode 100644
index 0000000..c61bce5
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/fragment/base/WebViewFragment.java
@@ -0,0 +1,23 @@
+package ren.solid.materialdesigndemo.fragment.base;
+
+import android.webkit.WebView;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/31
+ * Time:14:27
+ */
+public abstract class WebViewFragment extends BaseFragment {
+
+ protected WebView mWebView;
+
+ public boolean canGoBack() {
+ return mWebView != null && mWebView.canGoBack();
+ }
+
+ public void goBack() {
+ if (mWebView != null) {
+ mWebView.goBack();
+ }
+ }
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/utils/SolidHttpUtils.java b/app/src/main/java/ren/solid/materialdesigndemo/utils/SolidHttpUtils.java
new file mode 100644
index 0000000..36a44c8
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/utils/SolidHttpUtils.java
@@ -0,0 +1,86 @@
+package ren.solid.materialdesigndemo.utils;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.widget.ImageView;
+
+import com.squareup.picasso.Picasso;
+
+import java.io.IOException;
+
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import ren.solid.materialdesigndemo.SolidApplication;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:15:02
+ */
+public class SolidHttpUtils {
+
+ private Handler mHandler;
+ private static SolidHttpUtils mInstance;
+
+ private SolidHttpUtils() {
+ mHandler = new Handler(Looper.getMainLooper());
+ }
+
+
+ public static SolidHttpUtils getInstance() {
+ if (mInstance == null)
+ mInstance = new SolidHttpUtils();
+ return mInstance;
+ }
+
+ public void loadString(final String url, final HttpCallBack callBack) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ OkHttpClient client = new OkHttpClient();
+ Request request = new Request.Builder()
+ .url(url)
+ .build();
+ try {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ callBack.onLoading();
+ }
+ });
+
+ Response response = client.newCall(request).execute();
+
+ final String result = response.body().string();
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ callBack.onSuccess(result);
+ }
+ });
+
+ } catch (final IOException e) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ callBack.onError(e);
+ }
+ });
+ }
+ }
+ }).start();
+ }
+
+ public void loadImage(String url, ImageView iv) {
+ Picasso.with(SolidApplication.getInstance()).load(url).into(iv);
+ }
+
+ public interface HttpCallBack {
+ void onLoading();
+
+ void onSuccess(String result);
+
+ void onError(Exception e);
+ }
+}
diff --git a/app/src/main/java/ren/solid/materialdesigndemo/utils/ViewUtils.java b/app/src/main/java/ren/solid/materialdesigndemo/utils/ViewUtils.java
new file mode 100644
index 0000000..2121344
--- /dev/null
+++ b/app/src/main/java/ren/solid/materialdesigndemo/utils/ViewUtils.java
@@ -0,0 +1,50 @@
+package ren.solid.materialdesigndemo.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import ren.solid.materialdesigndemo.fragment.AboutFragment;
+import ren.solid.materialdesigndemo.fragment.BlogFragment;
+import ren.solid.materialdesigndemo.fragment.BookFragment;
+import ren.solid.materialdesigndemo.fragment.MainFragment;
+import ren.solid.materialdesigndemo.fragment.MovieFragment;
+import ren.solid.materialdesigndemo.fragment.base.BaseFragment;
+
+/**
+ * Created by _SOLID
+ * Date:2016/3/30
+ * Time:19:37
+ */
+public class ViewUtils {
+
+ private static Map fragmentList = new HashMap<>();
+
+ /**
+ * 根据名字创建Fragment
+ *
+ * @param fName
+ * @return
+ */
+ public static BaseFragment createFrgment(String fName) {
+ BaseFragment resultFragment = null;
+ if (fragmentList.containsKey(fName)) {
+ resultFragment = fragmentList.get(fName);
+ } else {
+ if (fName.equals("BlogFragment")) {
+ resultFragment = new BlogFragment();
+ } else if (fName.equals("MainFragment")) {
+ resultFragment = new MainFragment();
+ } else if (fName.equals("BookFragment")) {
+ resultFragment = new BookFragment();
+ } else if (fName.equals("MovieFragment")) {
+ resultFragment = new MovieFragment();
+ } else if (fName.equals("AboutFragment")) {
+ resultFragment = new AboutFragment();
+ }
+
+ fragmentList.put(fName, resultFragment);
+ }
+
+ return resultFragment;
+ }
+}
diff --git a/app/src/main/res/drawable/avastar.jpg b/app/src/main/res/drawable/avastar.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f7a0b5511832b777b4b65c66f9dbd702a7e8ec27
GIT binary patch
literal 133007
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