一 布局
<android.support.v4.widget.DrawerLayout
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--主界面-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<android.support.design.widget.TabLayout
android:id="@+id/tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></android.support.design.widget.TabLayout>
</LinearLayout>
<!--=========================分割线==================================-->
<!--侧滑界面-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#ded3d3"
android:orientation="horizontal">
<com.qy.xlistview.XListView
android:id="@+id/xlist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"> </com.qy.xlistview.XListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
二 MainActivity
public class MainActivity extends AppCompatActivity {
private DrawerLayout draw;
private Button button;
private ViewPager pager;
private TabLayout tab;
private XListView xlist;
private String url = "https://www.apiopen.top/meituApi?page=1";
private List<JsonBean.DataBean> data;
private XAdapter xAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
pager = findViewById (R.id.pager);
draw = findViewById (R.id.draw);
tab = findViewById (R.id.tab);
xlist = findViewById (R.id.xlist);
ArrayList<Fragment> list = new ArrayList<> ();
list.add (new Frag01());
list.add (new Frag02());
String str[]={"首页","我的"};
MypagerAdapter mypagerAdapter =new MypagerAdapter (getSupportFragmentManager (),list,str);
pager.setAdapter (mypagerAdapter);
tab.setupWithViewPager (pager);
xlist.setXListViewListener (new XListView.IXListViewListener () {
@Override
public void onRefresh() {
HttpUtil.getAsyncTask (url, new HttpUtil.CallBackA () {
@Override
public void getData(String s) {
Gson gson = new Gson ();
JsonBean bean = gson.fromJson (s, JsonBean.class);
data = bean.getData ();
xAdapter = new XAdapter (MainActivity.this, data);
xlist.setAdapter (xAdapter);
xlist.stopRefresh ();
}
});
}
@Override
public void onLoadMore() {
HttpUtil.getAsyncTask (url, new HttpUtil.CallBackA () {
@Override
public void getData(String s) {
Gson gson = new Gson ();
JsonBean bean = gson.fromJson (s, JsonBean.class);
List<JsonBean.DataBean> list2 = bean.getData ();
data.addAll (list2);
xAdapter.notifyDataSetChanged ();
xlist.stopLoadMore ();
}
});
}
});
HttpUtil.getAsyncTask (url, new HttpUtil.CallBackA () {
@Override
public void getData(String s) {
Gson gson = new Gson ();
JsonBean bean = gson.fromJson (s, JsonBean.class);
List<JsonBean.DataBean> data = bean.getData ();
xAdapter = new XAdapter (MainActivity.this, data);
xlist.setAdapter (xAdapter);
}
});
}
}
三 HttpUtil
public class HttpUtil {
public interface CallBackA{
void getData(String s);
}
public static void getAsyncTask(String url, final CallBackA backA){
new AsyncTask<String, Void, String> () {
@Override
protected String doInBackground(String... strings) {
return httpGet (strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute (s);
backA.getData (s);
}
}.execute (url);
}
public static boolean isNetworkConnected(Context context){
if(context!=null){
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService (Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo ();
if(networkInfo!=null){
return networkInfo.isAvailable ();
}
}
return false;
}
public static String httpGet(String strUrl){
try {
URL url = new URL (strUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection ();
connection.setRequestMethod ("GET");
connection.setReadTimeout (5000);
connection.setConnectTimeout (5000);
InputStream stream = connection.getInputStream ();
BufferedReader reader = new BufferedReader (new InputStreamReader (stream));
StringBuilder builder = new StringBuilder ();
String str="";
while ((str = reader.readLine ())!=null){
builder.append (str);
}
connection.disconnect ();
return builder.toString ();
} catch (Exception e) {
e.printStackTrace ();
}
return null;
}
}
四 Frag01
public class Frag01 extends Fragment {
private XListView xlist;
private XAdapter adapter;
private String url = "https://www.apiopen.top/meituApi?page=1";
private List<JsonBean.DataBean> data;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate (R.layout.frag01, container, false);
xlist = view.findViewById (R.id.xlist);
xlist.setPullLoadEnable (true);
//设置上拉和下拉
xlist.setXListViewListener (new XListView.IXListViewListener () {
@Override
public void onRefresh() {
HttpUtil.getAsyncTask (url, new HttpUtil.CallBackA () {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean bean = gson.fromJson (s, JsonBean.class);
data = bean.getData ();
XAdapter adapter = new XAdapter (getActivity (), data);
xlist.setAdapter (adapter);
xlist.stopRefresh ();
}
});
}
@Override
public void onLoadMore() {
HttpUtil.getAsyncTask (url, new HttpUtil.CallBackA () {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean bean = gson.fromJson (s, JsonBean.class);
List<JsonBean.DataBean> data1 = bean.getData ();
data.addAll (data1);
adapter.notifyDataSetChanged ();
xlist.stopLoadMore ();
}
});
}
});
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated (savedInstanceState);
HttpUtil.getAsyncTask (url, new HttpUtil.CallBackA () {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean bean = gson.fromJson (s, JsonBean.class);
List<JsonBean.DataBean> data = bean.getData ();
adapter = new XAdapter (getActivity (), data);
xlist.setAdapter (adapter);
}
});
}
}
五 XAdapter
ublic class XAdapter extends BaseAdapter {
private Context context;
private List<JsonBean.DataBean> data;
public XAdapter(Context context, List<JsonBean.DataBean> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size ();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType (position);
switch (type){
case 0:
ViewHolder0 holder0 = null;
if(convertView == null) {
convertView = View.inflate (context, R.layout.item, null);
holder0 = new ViewHolder0 ();
holder0.text0 = convertView.findViewById (R.id.text1);
convertView.setTag (holder0);
}else{
holder0 = (ViewHolder0) convertView.getTag ();
}
JsonBean.DataBean bean0 = data.get (position);
holder0.text0.setText (bean0.getType ());
break;
case 1:
ViewHolder1 holder1 = null;
if(convertView == null) {
convertView = View.inflate (context, R.layout.item1, null);
holder1 = new ViewHolder1 ();
holder1.text1 = convertView.findViewById (R.id.text1);
holder1.image1 = convertView.findViewById (R.id.image1);
convertView.setTag (holder1);
}else{
holder1 = (ViewHolder1) convertView.getTag ();
}
JsonBean.DataBean bean1 = data.get (position);
holder1.text1.setText (bean1.getType ());
Glide.with(context).load("http://n.sinaimg.cn/sports/transform/237/w650h387/20190219/XUgA-htfpvza1481742.png").apply(RequestOptions.bitmapTransform(new CircleCrop ())).into(holder1.image1);
break;
case 2:
ViewHolder2 holder2 = null;
if(convertView == null) {
convertView = View.inflate (context, R.layout.item2, null);
holder2 = new ViewHolder2 ();
holder2.text2 = convertView.findViewById (R.id.text2);
holder2.image2 = convertView.findViewById (R.id.image2);
convertView.setTag (holder2);
}else{
holder2 = (ViewHolder2) convertView.getTag ();
}
JsonBean.DataBean bean2 = data.get (position);
holder2.text2.setText (bean2.getType ());
Glide.with (context).load ("http://e.hiphotos.baidu.com/image/pic/item/a1ec08fa513d2697e542494057fbb2fb4316d81e.jpg").into (holder2.image2);
break;
}
return convertView;
}
class ViewHolder0{
TextView text0;
}
class ViewHolder1{
TextView text1;
ImageView image1;
}
class ViewHolder2{
TextView text2;
ImageView image2;
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
return position % 3;
}
}
六 MypagerAdapter
public class MypagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> list;
private String str[];
public MypagerAdapter(FragmentManager fm, ArrayList<Fragment> list, String[] str) {
super(fm);
this.list = list;
this.str = str;
}
@Override
public Fragment getItem(int i) {
return list.get(i);
}
@Override
public int getCount() {
return list.size();
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190225191131689.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI1OTkwOA==,size_16,color_FFFFFF,t_70)
implementation fileTree(include: [’*.jar’], dir: ‘libs’)
implementation ‘com.android.support:appcompat-v7:28.0.0’
implementation ‘com.android.support.constraint:constraint-layout:1.1.3’
testImplementation ‘junit:junit:4.12’
androidTestImplementation ‘com.android.support.test?1.0.2’
androidTestImplementation ‘com.android.support.test.espresso:espresso-core:3.0.2’
implementation ‘com.google.code.gson:gson:2.8.5’
implementation ‘com.github.bumptech.glide:glide:4.9.0’