DrawerLayout+TabLayout+ViewPage+prt多条目

2024-04-25 00:32

本文主要是介绍DrawerLayout+TabLayout+ViewPage+prt多条目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Util工具类

package com.example.zonghe.Utils;import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.support.v4.content.CursorLoader;import com.google.gson.Gson;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;public class MyUtil {private static MyUtil instance;private MyUtil(){}public static MyUtil getInstance(){if(instance==null){instance = new MyUtil();}return instance;}//通过Uri得到地址public String url2Path(Uri uri,Context context){String [] proj = {MediaStore.Images.Media.DATA};CursorLoader loader = new CursorLoader(context, uri, proj, null, null, null);Cursor cursor = loader.loadInBackground();int columnIndexOrThrow = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();String string = cursor.getString(columnIndexOrThrow);return string;}
//二次采样public Bitmap caiyang (String iconPath,int wigth,int height){BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds=true;BitmapFactory.decodeFile(iconPath,options);options.inSampleSize = Math.max(options.outHeight/height,options.outWidth/wigth);options.inJustDecodeBounds = false;Bitmap bitmap = BitmapFactory.decodeFile(iconPath, options);return bitmap;}//获取字符public String getString (InputStream stream) throws IOException {BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));StringBuilder builder = new StringBuilder();for (String tmp = bufferedReader.readLine();tmp!=null;tmp=bufferedReader.readLine()){builder.append(tmp);}return builder.toString();}public InputStream getNewData (String url){try {URL url1 = new URL(url);HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();urlConnection.setRequestMethod("GET");urlConnection.setReadTimeout(10000);urlConnection.setConnectTimeout(10000);int responseCode = urlConnection.getResponseCode();if(responseCode==200){return urlConnection.getInputStream();}} catch (IOException e) {e.printStackTrace();}return null;}public <T>T getGson (String s,Class clazz){Object o = new Gson().fromJson(s, clazz);return (T)o;}public interface CallBack<T>{void getData(T o);}public void getNetData(String url, final Class clazz, final CallBack callBack){new AsyncTask<String, Void, Object>() {@Overrideprotected Object doInBackground(String... strings) {InputStream newData = getNewData(strings[0]);try {String string = getString(newData);Object gson = getGson(string, clazz);return gson;} catch (IOException e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(Object o) {callBack.getData(o);}}.execute(url);}}

Activity

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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"android:id="@+id/drawer"tools:context=".MainActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><android.support.v4.view.ViewPagerandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/viewpage"android:layout_above="@id/tablayout"></android.support.v4.view.ViewPager><android.support.design.widget.TabLayoutandroid:layout_width="match_parent"android:id="@+id/tablayout"android:layout_height="wrap_content"android:layout_alignParentBottom="true"></android.support.design.widget.TabLayout></RelativeLayout><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/fragment_drawer"android:layout_gravity="left"android:background="#ffffff"></FrameLayout>
</android.support.v4.widget.DrawerLayout><?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.TabLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/tablayout_dianying"android:overScrollMode="ifContentScrolls"app:layout_constraintTop_toTopOf="parent"app:layout_constraintLeft_toLeftOf="parent"></android.support.design.widget.TabLayout><android.support.v4.view.ViewPagerandroid:layout_width="0dp"android:layout_height="0dp"android:id="@+id/viewpage_dianying"app:layout_constraintTop_toBottomOf="@id/tablayout_dianying"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintBottom_toBottomOf="parent"></android.support.v4.view.ViewPager>
</android.support.constraint.ConstraintLayout>

MainActivity

package com.example.zonghe;import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;import com.example.zonghe.adapter.ContentViewPage;
import com.example.zonghe.base.BaseActivity;
import com.example.zonghe.fragment.LeftFragment;public class MainActivity extends BaseActivity {private DrawerLayout drawerLayout;private ActionBarDrawerToggle toggle;private ViewPager viewPager;private TabLayout tabLayout;private ContentViewPage contentViewPage;@Overrideprotected int setView() {return R.layout.activity_main;}@Overrideprotected void initView(Bundle savedInstanceState) {viewPager = findViewById(R.id.viewpage);tabLayout = findViewById(R.id.tablayout);contentViewPage = new ContentViewPage(getSupportFragmentManager());if(savedInstanceState==null){getSupportFragmentManager().beginTransaction().add(R.id.fragment_drawer,new LeftFragment()).commit();}getSupportActionBar().setDisplayHomeAsUpEnabled(true);drawerLayout = findViewById(R.id.drawer);toggle = new ActionBarDrawerToggle(this, drawerLayout,R.string.open,R.string.close);drawerLayout.addDrawerListener(toggle);toggle.syncState();}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if(toggle.onOptionsItemSelected(item)){return true;}return super.onOptionsItemSelected(item);}@Overrideprotected void initData() {viewPager.setAdapter(contentViewPage);tabLayout.setupWithViewPager(viewPager);}
}

Fragment

//侧拉fragment
package com.example.zonghe.fragment;import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;import com.example.zonghe.R;
import com.example.zonghe.Utils.MyUtil;
import com.example.zonghe.base.BaseFragment;
import com.example.zonghe.leftAdapter;public class LeftFragment extends BaseFragment {private ListView listview;private com.example.zonghe.leftAdapter leftAdapter;private final int IMAGE_OK = 100;private Uri iconUri;@Overrideprotected int setView() {return R.layout.leftfragment;}@Overrideprotected void initView(View view) {listview = view.findViewById(R.id.leftlistview);leftAdapter = new leftAdapter(getActivity());listview.setAdapter(leftAdapter);}@Overrideprotected void initData() {listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(getActivity(),"123",Toast.LENGTH_LONG).show();if(position==0){Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");startActivityForResult(intent,IMAGE_OK);}return true;}});}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode==IMAGE_OK&&resultCode==getActivity().RESULT_OK){iconUri = data.getData();String s = MyUtil.getInstance().url2Path(iconUri, getActivity());Bitmap caiyang = MyUtil.getInstance().caiyang(s, 100, 100);leftAdapter.setIcon(caiyang);}}
}prt Fragment
package com.example.zonghe.fragment;import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;import com.example.zonghe.R;
import com.example.zonghe.Utils.MyUtil;
import com.example.zonghe.adapter.ShangYingFragmentAdapter;
import com.example.zonghe.base.BaseFragment;
import com.example.zonghe.bean.Bean;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.handmark.pulltorefresh.library.internal.Utils;public class ShangYingFragment extends BaseFragment {private String url;private PullToRefreshListView listView;private ShangYingFragmentAdapter shangYingFragmentAdapter;@Overrideprotected int setView() {return R.layout.shangying_fragment;}@Overrideprotected void initView(View view) {url = getArguments().getString("url");listView = view.findViewById(R.id.pulllistview);shangYingFragmentAdapter = new ShangYingFragmentAdapter(getActivity());listView.setAdapter(shangYingFragmentAdapter);listView.setMode(PullToRefreshBase.Mode.BOTH);listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {@Overridepublic void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {mpage = 1;initData();}@Overridepublic void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {initData();}});}private int mpage = 1;@Overrideprotected void initData() {MyUtil.getInstance().getNetData(url + mpage, Bean.class, new MyUtil.CallBack<Bean>() {@Overridepublic void getData(Bean o) {if (mpage == 1) {shangYingFragmentAdapter.setData(o.getResult());} else {shangYingFragmentAdapter.addData(o.getResult());}mpage++;listView.onRefreshComplete();}});}
}
///
//TabLayout 绑定
package com.example.zonghe.fragment;import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.view.View;import com.example.zonghe.R;
import com.example.zonghe.adapter.DianYingPagerAdapter;
import com.example.zonghe.base.BaseFragment;public class Fragmentdianying extends BaseFragment {@Overrideprotected int setView() {return R.layout.fragmentdianying;}@Overrideprotected void initView(View view) {ViewPager viewPager = view.findViewById(R.id.viewpage_dianying);TabLayout tabLayout = view.findViewById(R.id.tablayout_dianying);viewPager.setAdapter(new DianYingPagerAdapter(getChildFragmentManager()));tabLayout.setupWithViewPager(viewPager);}@Overrideprotected void initData() {}
}

Abapter

package com.example.zonghe.adapter;

import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import com.example.zonghe.fragment.FragmentShouye;
import com.example.zonghe.fragment.FragmentWode;
import com.example.zonghe.fragment.Fragmentdianying;

public class ContentViewPage extends FragmentPagerAdapter {
private String [] pageNames = new String[]{“首页”,“电影”,“我的”};
public ContentViewPage(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int i) {switch (i){case 0:return new Fragmentdianying();case 1:return new FragmentShouye();case 2:return new FragmentWode();}return null;
}@Override
public int getCount() {return pageNames.length;
}@Nullable
@Override
public CharSequence getPageTitle(int position) {return pageNames[position];
}

}

切换fragment 传url
package com.example.zonghe.adapter;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import com.example.zonghe.fragment.ShangYingFragment;

public class DianYingPagerAdapter extends FragmentPagerAdapter {
private String [] names = new String[]{“正在上映”,“即将热映”};
private String[] urls = new String[]{
“http://172.17.8.100/movieApi/movie/v1/findHotMovieList?count=10&page=”,
“http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?count=10&page=”
};

public DianYingPagerAdapter(FragmentManager fm) {super(fm);
}@Override
public Fragment getItem(int i) {switch (i){default:Bundle bundle = new Bundle();bundle.putString("url",urls[i]);ShangYingFragment shangYingFragment = new ShangYingFragment();shangYingFragment.setArguments(bundle);return shangYingFragment;}}@Override
public int getCount() {return names.length;
}@Nullable
@Override
public CharSequence getPageTitle(int position) {return names[position];
}

}
///
prt fragment
package com.example.zonghe.adapter;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.zonghe.R;
import com.example.zonghe.bean.Bean;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

public class ShangYingFragmentAdapter extends BaseAdapter {
private List<Bean.ResultBean>mlist;
private Context mContext;

public ShangYingFragmentAdapter(Context mContext) {this.mContext = mContext;mlist = new ArrayList<>();
}
public void setData(List<Bean.ResultBean>list){mlist.clear();if(list!=null){mlist.addAll(list);}notifyDataSetChanged();
}
public void addData(List<Bean.ResultBean>list){if(list!=null){mlist.addAll(list);notifyDataSetChanged();}
}@Override
public int getCount() {return mlist.size();
}@Override
public Bean.ResultBean getItem(int position) {return mlist.get(position);
}@Override
public long getItemId(int position) {return position;
}@Override
public View getView(int position, View convertView, ViewGroup parent) {ViewHoder viewHoder;if(convertView==null){convertView = LayoutInflater.from(mContext).inflate(R.layout.item_shangying,parent,false);viewHoder  = new ViewHoder();viewHoder.imageView = convertView.findViewById(R.id.imageview_shangying);viewHoder.texttitle = convertView.findViewById(R.id.title_shangying);viewHoder.textsum = convertView.findViewById(R.id.sun_shangying);convertView.setTag(viewHoder);}else{viewHoder = (ViewHoder) convertView.getTag();}ImageLoader.getInstance().displayImage(getItem(position).getImageUrl(),viewHoder.imageView);viewHoder.textsum.setText(getItem(position).getSummary());viewHoder.texttitle.setText(getItem(position).getName());return convertView;
}
class ViewHoder {ImageView imageView;TextView texttitle,textsum;
}

}
///
//侧拉Adapter
package com.example.zonghe.adapter;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.zonghe.R;
import com.example.zonghe.bean.Bean;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

public class ShangYingFragmentAdapter extends BaseAdapter {
private List<Bean.ResultBean>mlist;
private Context mContext;

public ShangYingFragmentAdapter(Context mContext) {this.mContext = mContext;mlist = new ArrayList<>();
}
public void setData(List<Bean.ResultBean>list){mlist.clear();if(list!=null){mlist.addAll(list);}notifyDataSetChanged();
}
public void addData(List<Bean.ResultBean>list){if(list!=null){mlist.addAll(list);notifyDataSetChanged();}
}@Override
public int getCount() {return mlist.size();
}@Override
public Bean.ResultBean getItem(int position) {return mlist.get(position);
}@Override
public long getItemId(int position) {return position;
}@Override
public View getView(int position, View convertView, ViewGroup parent) {ViewHoder viewHoder;if(convertView==null){convertView = LayoutInflater.from(mContext).inflate(R.layout.item_shangying,parent,false);viewHoder  = new ViewHoder();viewHoder.imageView = convertView.findViewById(R.id.imageview_shangying);viewHoder.texttitle = convertView.findViewById(R.id.title_shangying);viewHoder.textsum = convertView.findViewById(R.id.sun_shangying);convertView.setTag(viewHoder);}else{viewHoder = (ViewHoder) convertView.getTag();}ImageLoader.getInstance().displayImage(getItem(position).getImageUrl(),viewHoder.imageView);viewHoder.textsum.setText(getItem(position).getSummary());viewHoder.texttitle.setText(getItem(position).getName());return convertView;
}
class ViewHoder {ImageView imageView;TextView texttitle,textsum;
}

}

这篇关于DrawerLayout+TabLayout+ViewPage+prt多条目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933263

相关文章

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

Android开发:自定义TabLayout,神奇效果竟是如此简单

此时有的小伙伴可能会想,自定义view太麻烦,不如让UI直接把这个弧度切出来,不是一共就三个tab项嘛,Textview,ImageView… 这样横着排起来,然后做适当的显示和隐藏不就行啦。 是的,确实是可以,但是作为一个优秀的开发人员。我们还是要优选自定义view滴。 思路分析 =======================================================

SwipeLayout一个展示条目底层菜单的侧滑控件

由于项目上的需要侧滑条目展示收藏按钮,记得之前代码家有写过一个厉害的开源控件 AndroidSwipeLayout 本来准备直接拿来使用,但是看过 issue 发现现在有不少使用者反应有不少的 bug ,而且代码家现在貌似也不进行维护了.故自己实现了一个所要效果的一个控件.因为只是实现我需要的效果,所以大家也能看到,代码里有不少地方我是写死的.希望对大家有些帮助.而且暂时也不需要 Android

更改TabLayout选中的背景色

项目中有这种需求,google了下发现了解决方案,摘录如下方便大家排查. 原文链接 原理是利用selector 第一步 在drawable文件夹下建立文件 tab_background.xml <?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/a

TabLayout+ViewPager+Fragment中Fragment的可见和不可见问题

场景 TabLayout+ViewPager+Fragment的使用过程中需要判断Fragment是否对用户可见,监听Fragment由不可见变为可见的事件 解决方案 重写Fragment的setUserVisibleHint(boolean isVisibleToUser)方法 坑 由于ViewPager有预加载,所以在切换时,每个预加载完的Fragment都会执行setUserVis

Android控件之Toolbar + DrawerLayout的使用

载请标明出处: http://blog.csdn.net/u011974987/article/details/50963495; 最近闲着没事儿,在关注一些遵循最新的Material Design设计规范的应用和效果,感觉很高大上;一直都没有去尝试过Material Design的一些新控件,很多还是不熟悉的,所以最近就写Demo 来熟悉下这些控件的使用,接下来使用官方支持库来快速实现

自定义TabLayout的样式 + ViewPager

自定义TabLayout的样式  <style name="MyCustomTabLayoutStyle" parent="Widget.Design.TabLayout"> <item name="tabIndicatorHeight">2dp</item>  <item name="tabPaddingStart">0dp</item>   <item name="tabPadding

DrawerLayout 事件穿透解决方案

今天在使用DrawerLayout的时候遇到一个比较奇葩的问题,在DrawerLayout上下滑动的时候,底部的ListView会获得事件跟着手机滑动。 网上大多数DrawerLayout的实例都是跟google一样,一个listview,所以listview会获得焦点,事件就不会传递了。但是我是用的include加载的布局,所以才会出现这个情况。 解决方法是:在抽屉布局中加入 android

Android5.0系统:Material风格以及DrawerLayout抽屉效果

先上效果图: 主要组件: DrawerLayoutToolbar 首先,配置文件代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app= "http://schemas.a

android原生TabLayout之自定义指示器效果

“com.google.android.material.tabs.TabLayout” 这个玩意说起来大家都不陌生。结合viewPager或者单独使用。场景非常多。当然市面上的三方也数不胜数。但是毕竟是亲儿子。用起来终归是顺手一些。下面说一下TabLayout的具体用法细节: 首先,xml布局引入(此处为举例说明,具体属性用法自行百度): <com.google.android.materi