您的位置:首页 > 其它

TabLayout横向滑动,DrawerLayout侧滑,PullToRefreshListView上拉刷新下拉加载联用

2017-09-21 08:56 621 查看
Activity

public class MainActivity extends AppCompatActivity {
ViewPager vp_ma; //ViewPager
LbUtils Lu;//数据请求的包
LbBean lb; //LbBean包
LbApdata lbApdata; //轮播图的适配器
List<ImageView> list; //用于存放轮播图的图片额集合
List<LbBean.NewslistBean> list1; //轮播图的bena包
private List<ImageView> imagesList;  //用于存放小圆点的集合
LinearLayout  linearLayout;  //小园点的布局控件
Button bt_ma; //Button按钮用于实现跳转
//handler机制
//用于实现无限轮播
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
//获取当前条目
int index = vp_ma.getCurrentItem();
//向右轮播
vp_ma.setCurrentItem(index+=1);
//间隔2秒
handler.sendEmptyMessageDelayed(1,1000);//轮播图轮播的速度
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
vp_ma = (ViewPager) findViewById(R.id.vp_ma);
linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
bt_ma [/b]= (Button) findViewById(R.id.bt_ma);
getBeanByGson();
//viewPager页面改变的监听事件  小圆点的监听
vp_ma.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//如果选中了这一页,,,当前小圆点红色,,,否则绿色
for (int i = 0;i<imagesList.size();i++){
if (i== position%imagesList.size()){
imagesList.get(i).setImageResource(R.drawable.doc_select);
}else {
imagesList.get(i).setImageResource(R.drawable.doc_select_no);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//给Button一个点击事件  用于跳转
bt_ma.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,Activity.class);
startActivity(intent);
}
});
}
//轮播图的解析
public void getBeanByGson() {
// 使用该方法得到了一个 Json的字符输入流
new AsyncTask<String, String, String>() {
@Override
protected String doInBackground(String... strings) {
String reader = LbUtils.getNetDataStr();
return reader;
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// 使用Gson把该字符输入流转换成JavaBean
Gson gson = new Gson();
lb = gson.fromJson(s, LbBean.class);
list = new ArrayList<ImageView>();
list1 = new ArrayList<>();
list1.addAll(lb.getNewslist());
for (int i = 0; i < list1.size(); i++) {
ImageView imageView = new ImageView(MainActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(list1.get(i).getPicUrl(), imageView);
list.add(imageView);
}
initDoc();
lbApdata = new LbApdata(list);
vp_ma.setAdapter(lbApdata);
handler.sendEmptyMessageDelayed(1, 1000);//轮播图轮播的速度
}
}.execute();
}
private void initDoc() {
//首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置
imagesList = new ArrayList<>();
linearLayout.removeAllViews();//清空/移除所有的view
for (int i = 0;i<list.size();i++){
ImageView imageView = new ImageView(MainActivity.this);
if (i==0){//显示第一页,,,红的
imageView.setImageResource(R.drawable.doc_select);
}else {//绿的
imageView.setImageResource(R.drawable.doc_select_no);
}
//添加到集合
imagesList.add(imageView);
//加入到线性布局中显示
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(5,0,5,0);//这是小圆点间距
linearLayout.addView(imageView,params);//把小圆点存放到布局中
}

}

}

Activity布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.yuekaolx.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/vp_ma"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/vp_ma"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:orientation="horizontal">
</LinearLayout>
<Button
android:id="@+id/bt_ma"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="进入主界面"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>


跳转后页面 TabLayout

public class Activity extends AppCompatActivity {
TabLayout tab; //横向布局
ViewPager vp_ac;//ViewPage
List<String> listStr; //用于存放添加Fragment的结合
List<Fragment> listTv;//用于存放Fragment的集合
private ListView lv; //侧滑的控件
private DrawerLayout drawerLayout; //侧滑
List<PullBean.ResultBean.ListBean> lsit;  //PuiiBean的结合
PullBean Pb;  //PullBean包
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_);
//找控件
tab = (TabLayout) findViewById(R.id.tab);
vp_ac = (ViewPager) findViewById(R.id.vp_ac);
ListView lv = (ListView) findViewById(R.id.lv);
//侧滑的集合
List<String> list = new ArrayList<>();
//给侧滑页面添加数据
list.add("数据1");
list.add("数据2");
list.add("数据3");
//侧滑的适配器
ArrayAdapter<String> array = new ArrayAdapter<String>(Activity.this,
android.R.layout.simple_list_item_1, list);
lv.setAdapter(array);

init(); //侧滑的数据调用
//TabLayout的横向布局  添加数据
listStr = new ArrayList();
listStr.add("美女");
listStr.add("段子");
listStr.add("社会");
listStr.add("汽车");
listStr.add("博客");
listStr.add("前端");
listStr.add("公司");
listStr.add("资讯");
listStr.add("视频");
listStr.add("文学");
listTv = new ArrayList<>();
for (int i = 0; i < 10; i++) {
listTv.add(new NewsFragment(listStr.get(i)));
}
vp_ac.setAdapter(new MyAdapter(getSupportFragmentManager()));
//ViewpAge的预加载解决方法
vp_ac.setOffscreenPageLimit(listTv.size());
//TabLayout和ViewPage进行联动
tab.setupWithViewPager(vp_ac);
}
//ViewPage的适配器
class MyAdapter extends FragmentPagerAdapter {

public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return listTv.get(position);
}
@Override
public int getCount() {
return listTv.size();
}
@Override
public CharSequence getPageTitle(int position) {
return listStr.get(position);
}
}
//侧滑
private void init() {
drawerLayout = (DrawerLayout) findViewById(R.id.mydraw);
lv = (ListView) findViewById(R.id.lv);
//点击lv的条目,关闭侧滑,在主界面显示相关详细
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
drawerLayout.closeDrawer(lv);//关闭侧滑
//改变主界面
String str = parent.getItemAtPosition(position).toString();
}
});
}

}



TabLayout布局


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.yuekaolx.Activity">
<android.support.design.widget.TabLayout
android:id="@+id/tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="center"
app:tabIndicatorColor="@color/colorAccent"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/colorPrimaryDark"
app:tabTextColor="@color/colorPrimary"
>
</android.support.design.widget.TabLayout>

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mydraw"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent"
>
<android.support.v4.view.ViewPager
android:id="@+id/vp_ac"
android:layout_below="@+id/tab"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<ListView
android:id="@+id/lv"
android:layout_width="240sp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="#f00"
android:dividerHeight="1dp"
android:background="#fff"
/>
</android.support.v4.widget.DrawerLayout>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>


TabLyout的Fragment数据

public class NewsFragment extends Fragment {
PullToRefreshListView refresh_list_view;  //用于实现上拉刷新下拉加载
List<PullBean.ResultBean.ListBean> list = new ArrayList<>(); //上拉刷新下拉啊加载的结合
boolean boo;
int NUM=1; //实现刷新的时候可以加载更多和刷新不同的数据
LbUtils lb; //数据的请求包
PullBean PB; //PullBean包
MyApdata myApdata;  //适配器
ListView  lv;
public NewsFragment(String s) {
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
//找布局
View view = View.inflate(getActivity(),R.layout.fragment,null);
//找控件
refresh_list_view = view.findViewById(R.id.refresh_list_view);
//设置打开文件方式
refresh_list_view.setMode(PullToRefreshBase.Mode.BOTH);
lv = view.findViewById(R.id.lv);

return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//这用于实现上拉刷新下拉加载
ILoadingLayout startLabels = refresh_list_view
.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("下拉刷新");
startLabels.setRefreshingLabel("正在拉");
startLabels.setReleaseLabel("放开刷新");
ILoadingLayout endLabels = refresh_list_view.getLoadingLayoutProxy( false, true);
endLabels.setPullLabel("上拉刷新");
endLabels.setRefreshingLabel("正在载入...");
endLabels.setReleaseLabel("放开刷新...");
ListGson();
//PullToRefreshListView给他一个监听用于监听上拉还是下拉
refresh_list_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
NUM++;
boo = true;
ListGson();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
NUM++;
boo = false;
ListGson();
}
});
}
//异步请求数据
public void ListGson(){
new AsyncTask<String,String,String>(){
@Override
protected String doInBackground(String... strings) {
String read = LbUtils.getNetData();
return read;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Gson gson = new Gson();
PullBean PB = gson.fromJson(result, PullBean.class);
list.addAll(0,PB.getResult().getList());//把数据存放到集合中
setAdapter(list);//发送集合
refresh_list_view.onRefreshComplete();
}
}.execute();
}
//给适配器做判断
public void setAdapter(List<PullBean.ResultBean.ListBean> list){
if(myApdata == null){
myApdata = new MyApdata(list,getActivity());
refresh_list_view.setAdapter(myApdata);
}else{

myApdata.notifyDataSetChanged();
}
}

}


布局文件


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/refresh_list_view"
ptr:ptrDrawable="@drawable/default_ptr_flip"
ptr:ptrAnimationStyle="flip"
ptr:ptrHeaderBackground="#383838"
ptr:ptrHeaderTextColor="#FFFFFF"  >
</com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>


轮播适配器


//轮播图的适配器
public class LbApdata extends PagerAdapter{

List<ImageView> list = new ArrayList<>();
public LbApdata(List<ImageView> list) {
this.list = list;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;//Integer.MAX_VALUE可实现无限轮播
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;//固定的
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
position %= list.size();
container.addView(list.get(position));
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
PullToRefreshListView适配器


public class MyApdata extends BaseAdapter {
//构造参数
List<PullBean.ResultBean.ListBean> list;
//创建上下文
Context context;

public MyApdata(List<PullBean.ResultBean.ListBean> list, Context context) {
this.list = list;
this.context = context;
}
//有几个条目类型
@Override
public int getViewTypeCount() {
return 2;
}
//判断怎样分辨每个条目的位置
@Override
public int getItemViewType(int position) {
if(position%2==0){
return 0;
}else{
return 1;
}
}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int i) {
return list.get(i);
}

@Override
public long getItemId(int i) {
return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder=null;
ViewHolder2 holder2 = null;
int type = getItemViewType(i);
//进行多条目的判断
switch (type){
//如果为0,则是第一种布局
case 0:
if(view==null){
view=View.inflate(context,R.layout.itme_one,null);
holder=new ViewHolder();
holder.iv_one= (ImageView) view.findViewById(R.id.iv_one);
holder.tv_one= (TextView) view.findViewById(R.id.tv_one);
view.setTag(holder);
}else{
holder= (ViewHolder) view.getTag();
}
holder.tv_one.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getFirstImg(),holder.iv_one);
break;
//如果为1,则是第二种布局
case 1:
if(view==null){
view=View.inflate(context,R.layout.itme_two,null);
holder2=new ViewHolder2();
holder2.tv_two= (TextView) view.findViewById(R.id.tv_two);
view.setTag(holder2);
}else{
holder2= (ViewHolder2) view.getTag();
}
holder2.tv_two.setText(list.get(i).getTitle());
break;
}
DisplayImageOptions build = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher)
.showImageOnLoading(R.mipmap.ic_launcher)
.build();
return view;
}
//优化XlistView
class ViewHolder{
ImageView iv_one;
TextView tv_one;
}
class ViewHolder2{
TextView tv_two ;
}
}


数据请求包

public class LbUtils {
//无限轮播的数据请求
public static String getNetDataStr() {
String json = null;
try {
URL url = new URL(
"https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = -1;
byte[] buff = new byte[1024];
while((len = is.read(buff)) != -1){
bos.write(buff,0,len);
}
json = new String(bos.toByteArray());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}

//上拉刷新下拉加载的数据请求
public static String getNetData() {
try {
URL url = new URL(
"http://v.juhe.cn/weixin/query?key=88f7bbc507e3ecacfaeab2b47dd8936f");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
conn.setConnectTimeout(5000);

int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();

ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = -1;
byte[] buff = new byte[1024];
while((len = is.read(buff)) != -1){
bos.write(buff,0,len);
}

String json = new String(bos.toByteArray());
return json;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}

}
温馨提示:联网权限,读取权限,第三方架包,清单文件配置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: