編輯:關於android開發
在使用Viewpager和fragment處理中會出現預加載的問題,最近看別人的代碼,終於找到了一個很好的處理方法
能有效的解決預加載的問題,在fragment都繼承一個重寫setUserVisibleHint類的基類
如圖是效果圖

其實在是一個fragment中,用Viewpager和fragment再展示3個界面
不過如果你是在activity中實現Viewpager和fragment的結合不要這麼麻煩 這句代碼就夠了 viewPager.setOffscreenPageLimit(3)不用重寫什麼MyLazyFragment 了;
如下是主要代碼
package com.ithello.suibianxie.activity.notice;
import android.support.v4.app.Fragment;
public abstract class MyLazyFragment extends Fragment {
protected boolean isVisible;
/**
* 在這裡實現Fragment數據的緩加載.
*
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
protected abstract void onVisible();
protected abstract void onInvisible();
}
其中第一個fragment的處理方法和其他的不同
package com.ithello.suibianxie.activity.fragment;
import org.xutils.x;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.ithello.suibianxie.R;
import com.ithello.suibianxie.activity.notice.MyLazyFragment;
import com.ithello.suibianxie.common.GlobalData;
import com.ithello.suibianxie.util.Constant;
public class VideoListFragment extends MyLazyFragment{
private boolean isPrepared;
private boolean isFirstLoad = false;
private TextView tView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
//return inflater.inflate(R.layout.videolistfragment, container, false);
View view = inflater.inflate(R.layout.videolistfragment, null);
isPrepared = true;
initView(view);
System.out.println("1");
firstLoad();
return view;
}
private void initView(View view) {
// TODO Auto-generated method stub
tView=(TextView)view.findViewById(R.id.tv_videofragment);
}
@Override
protected void onVisible() {
// TODO Auto-generated method stub
Log.d("jiejie", "11 isPreparen:" + isPrepared + ", isVisible" + isVisible);
if(!isPrepared || !isVisible){
return;
}
if(!isFirstLoad){
isFirstLoad = true;
//firstLoad();
}
}
private void firstLoad() {
// TODO Auto-generated method stub
requestDates();
}
private void requestDates() {
// TODO Auto-generated method stub
RequestParams params = new RequestParams(Constant.findAppArticleList_url);
params.addBodyParameter("rc", GlobalData.getGlobalData().getRc());
params.addBodyParameter("page", 1+"");
params.addBodyParameter("rows", 10 +"");
params.addBodyParameter("appOS", "android");
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// TODO Auto-generated method stub
}
@Override
public void onFinished() {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(String arg0) {
// TODO Auto-generated method stub
Log.d("jiejie", arg0);
tView.setText(arg0);
}
});
}
@Override
protected void onInvisible() {
// TODO Auto-generated method stub
}
}
package com.ithello.suibianxie.activity.fragment;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.x;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.ithello.suibianxie.R;
import com.ithello.suibianxie.activity.notice.MyLazyFragment;
import com.ithello.suibianxie.adapter.ArticleAdapter;
import com.ithello.suibianxie.common.GlobalData;
import com.ithello.suibianxie.entity.Article;
import com.ithello.suibianxie.util.Constant;
public class ArticleFragment extends MyLazyFragment {
// private List<Article> list = new ArrayList<Article>();
private List<JSONObject> list = new ArrayList<JSONObject>();
private PullToRefreshListView mPullToRefreshListView;
private ListView listView;
private ArticleAdapter mAdapter;
private int page = 0;
private int rows = 10;
private int total = 0;
// private String urlString
// ="http://111.39.245.155:9527/dtbt/findAppArticleList.action";
// 標志位,標志已經初始化完成
private boolean isPrepared;
private boolean isFirstLoad = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
// return super.onCreateView(inflater, container, savedInstanceState);
// return inflater.inflate(R.layout.articlefragment, container, false);
View view = inflater.inflate(R.layout.articlefragment, null);
initListView(view);
isPrepared = true;
System.out.println("2");
return view;
}
@Override
protected void onVisible() {
// TODO Auto-generated method stub
Log.d("jiejie", "22 isPrepared:" + isPrepared + ", isVisible" + isVisible);
if (!isPrepared || !isVisible) {
return;
}
if (!isFirstLoad) {
isFirstLoad = true;
firstLoad();
}
}
@Override
protected void onInvisible() {
// TODO Auto-generated method stub
}
private void firstLoad() {
// TODO Auto-generated method stub
// mAdapter.notifyDataSetChanged();
// list.clear();
page = 1;
requestDate(page);
}
private void initListView(View view) {
// TODO Auto-generated method stub
listView = (ListView)view.findViewById(R.id.art_listview);
}
/**
* 進行網絡的請求
*
* @param page2
*/
protected void requestDate(int page2) {
// TODO Auto-generated method stub
RequestParams params = new RequestParams(
Constant.findAppArticleList_url);
params.addBodyParameter("rc", GlobalData.getGlobalData().getRc());
params.addBodyParameter("page", page2 + "");
params.addBodyParameter("rows", rows + "");
params.addBodyParameter("appOS", "android");
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// TODO Auto-generated method stub
}
@Override
public void onFinished() {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(String arg0) {
// TODO Auto-generated method stub
System.out.println(arg0);
Log.d("jiejie", arg0);
if(arg0 != null){
try {
JSONObject object= new JSONObject(arg0);
JSONArray array = object.getJSONArray("rows");
JSONObject dataJsonObject;
for(int i = 0 ; i<array.length();i++){
dataJsonObject =array.getJSONObject(i);
list.add(dataJsonObject);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mAdapter = new ArticleAdapter(getActivity(), list);
listView.setAdapter(mAdapter);
}
}
});
}
}
package com.ithello.suibianxie.activity.fragment;
import org.xutils.x;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.ithello.suibianxie.R;
import com.ithello.suibianxie.activity.notice.MyLazyFragment;
import com.ithello.suibianxie.common.GlobalData;
import com.ithello.suibianxie.util.Constant;
public class NoticeFragment extends MyLazyFragment{
private boolean isPrepared;
private boolean isFirstLoad = false;
private TextView tView ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
//return inflater.inflate(R.layout.noticefragment, container, false);
View view = inflater.inflate(R.layout.noticefragment, null);
isPrepared = true;
initView(view);
System.out.println("3");
return view;
}
private void initView(View view) {
// TODO Auto-generated method stub
tView = (TextView)view.findViewById(R.id.tv_notice);
}
@Override
protected void onVisible() {
// TODO Auto-generated method stub
Log.d("jiejie", "33 isPreparen" + isPrepared + ", isVisibletrue" + isVisible);
if(!isPrepared || !isVisible){
return;
}
if(!isFirstLoad){
isFirstLoad = true;
firstLoad();
}
}
@Override
protected void onInvisible() {
// TODO Auto-generated method stub
}
private void firstLoad() {
// TODO Auto-generated method stub
stHttoop();
}
private void stHttoop() {
// TODO Auto-generated method stub
RequestParams params = new RequestParams(Constant.findAppArticleList_url);
params.addBodyParameter("rc", GlobalData.getGlobalData().getRc());
params.addBodyParameter("page", 1+"");
params.addBodyParameter("rows", 10 +"");
params.addBodyParameter("appOS", "android");
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// TODO Auto-generated method stub
}
@Override
public void onFinished() {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(String arg0) {
// TODO Auto-generated method stub
Log.d("jiejie", arg0);
tView.setText(arg0);
}
});
}
}
其中Viewpager和fragment的結合我用的是IndicatorViewPager來實現的
package com.ithello.suibianxie.fragment;
import com.ithello.suibianxie.R;
import com.ithello.suibianxie.activity.fragment.ArticleFragment;
import com.ithello.suibianxie.activity.fragment.NoticeFragment;
import com.ithello.suibianxie.activity.fragment.VideoListFragment;
import com.potato.viewpagerindicator.view.indicator.IndicatorViewPager;
import com.potato.viewpagerindicator.view.indicator.adapter.IndicatorFragmentPagerAdapter;
import com.potato.viewpagerindicator.view.indicator.indicator.Indicator;
import com.potato.viewpagerindicator.view.indicator.slidebar.ColorBar;
import com.potato.viewpagerindicator.view.indicator.transition.OnTransitionTextListener;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
/**
* 第三個fragment
* @author zh
*
*/
public class MThreeFragment extends Fragment{
private IndicatorViewPager indicatorViewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.mthreefragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
setView();
}
private void setView() {
// TODO Auto-generated method stub
Resources res = getResources();
ViewPager viewPager =(ViewPager)getActivity().findViewById(R.id.fragment_training_home_viewPager);
Indicator indicator =(Indicator)getActivity().findViewById(R.id.fragment_training_home_fixedindicatorview);
int color =getResources().getColor(R.color.tab_indicator_daab3c);
indicator.setScrollBar(new ColorBar(getActivity(), color, 2));
float unSelectSize = 14;
float selectSize = unSelectSize * 1.0f;
int selectColor =res.getColor(R.color.tab_title_color_select_daab3c);
int unSelectColor = res.getColor(R.color.tab_title_color_normal_e8d6ab);
indicator.setOnTransitionListener(new OnTransitionTextListener().setColor(selectColor, unSelectColor).setSize(selectSize, unSelectSize));
viewPager.setOffscreenPageLimit(3);
indicatorViewPager = new IndicatorViewPager(indicator, viewPager);
indicatorViewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
}
private String[] tabNames ={"視頻","文章","通知"};
private class MyAdapter extends IndicatorFragmentPagerAdapter{
public MyAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
// TODO Auto-generated constructor stub
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3;
}
@Override
public Fragment getFragmentForPage(int position) {
// TODO Auto-generated method stub
Bundle bundle = new Bundle();
if(position ==0){
VideoListFragment videoListFragment = new VideoListFragment();
videoListFragment.setArguments(bundle);
return videoListFragment;
}else if (position == 1) {
ArticleFragment articleFragment = new ArticleFragment();
articleFragment.setArguments(bundle);
return articleFragment;
}else if (position ==2) {
NoticeFragment noticeFragment = new NoticeFragment();
noticeFragment.setArguments(bundle);
return noticeFragment;
}
VideoListFragment mainFragment = new VideoListFragment();
mainFragment.setArguments(bundle);
return mainFragment;
}
@Override
public View getViewForTab(int position, View convertView, ViewGroup container) {
// TODO Auto-generated method stub
if(convertView == null){
if(position ==0){
convertView = View.inflate(getActivity(), R.layout.title_bae_left, null);
}else if (position ==1) {
convertView = View.inflate(getActivity(), R.layout.title_bar_middle, null);
}else if (position == 2) {
convertView = View.inflate(getActivity(), R.layout.title_bar_right, null);
}
}
RelativeLayout layout = (RelativeLayout)convertView;
TextView tView = (TextView)layout.findViewById(R.id.tv);
tView.setText(tabNames[position]);
return convertView;
}
}
}
從編程的角度理解gradle腳本??Android Studio腳本構建和編程
從編程的角度理解gradle腳本??Android Studio腳本構建和編程 隨著Android 開發環境從Eclipse轉向Android Studio,我們每個
項目需求:自定義倒計時的TextView,倒計時textview
項目需求:自定義倒計時的TextView,倒計時textview現在這麼一個需求: 我有一個ListView,每一個列表項 布局如上圖,頂部一個大圖片展示,中部一個音頻
android開發游記:SpringView 下拉刷新的高效解決方案,定制你自己風格的拖拽頁面
android開發游記:SpringView 下拉刷新的高效解決方案,定制你自己風格的拖拽頁面 關於下拉刷新/上拉加載更多的解決方案網上已經有很多了,浏覽了目前主流的下拉
手機影音4--視頻播放器的基本功能(1),4--基本功能
手機影音4--視頻播放器的基本功能(1),4--基本功能 1.MediaPlayer和VideoView介紹 Android 系統中提供開發者開發多媒體應用(音視頻方面)