侧拉列表展示

本文深入探讨了Android应用开发中的关键组件与框架,包括DrawerLayout侧滑菜单、ViewPager页面切换、Fragment页面片段、TabLayout标签布局等核心UI组件的使用方法。同时,介绍了自定义适配器、异步任务加载数据、图片缓存与加载策略,以及如何通过Universal Image Loader进行图片高效管理。此外,还涵盖了基于Gson的数据解析和网络请求处理。

//MainActivity的xml

<?xml version="1.0" encoding="UTF-8"?>

-<android.support.v4.widget.DrawerLayout android:layout_height=“match_parent” android:layout_width=“match_parent” android:id="@+id/Drawer_Layout" xmlns:android=“http://schemas.android.com/apk/res/android”>

-

-

</android.support.v4.widget.DrawerLayout>

//MainActivityd 类

package com.zhuyue.dell.monilianxi;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private FrameLayout Framelayout;
private TextView xtv;
private TextView ltv;
private DrawerLayout Drawer_Layout;
private AFragment aFragment;
private BFragment bFragment;
private FragmentManager manager;
private ViewPager vp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initData();
    initView();


}

private void initData() {
    aFragment = new AFragment();
    bFragment = new BFragment();
}


private void initView() {
    Framelayout = (FrameLayout) findViewById(R.id.Framelayout);
    xtv = (TextView) findViewById(R.id.xtv);
    xtv.setOnClickListener(this);
    ltv = (TextView) findViewById(R.id.ltv);
    ltv.setOnClickListener(this);
    Drawer_Layout = (DrawerLayout) findViewById(R.id.Drawer_Layout);
    manager=getSupportFragmentManager();
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.xtv:
            manager.beginTransaction().replace(R.id.Framelayout,aFragment).commit();
            Drawer_Layout.closeDrawers();
        break;
        case R.id.ltv:
            manager.beginTransaction().replace(R.id.Framelayout,bFragment).commit();
            Drawer_Layout.closeDrawers();
            break;
    }
}

}

建一个applicationdemo包
package com.zhuyue.dell.monilianxi.applicationdemo;

import android.app.Application;
import android.os.Environment;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

import java.io.File;

/**

  • 你只要写了Application必须要注册如果不注册就会报错
    */
    public class MyApp extends Application {

    @Override
    public void onCreate() {
    super.onCreate();
    ImageLoaderConfiguration imageLoaderConfiguration = ImageLoaderConfiguration.createDefault(this);
    ImageLoader.getInstance().init(imageLoaderConfiguration);
    }
    }

Utils 工具包

package com.zhuyue.dell.monilianxi.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtils {

public static String get(String urlStr) throws Exception {
    URL url = new URL(urlStr);
    //由一个有效的网址服务返回这个对象
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    //设置请求方式
    connection.setRequestMethod("GET");
    connection.setConnectTimeout(5000);
    InputStream stream = connection.getInputStream();
    String inputStr = getInputStr(stream);
    return inputStr;
}

//把流转成字符串
private static String getInputStr(InputStream stream) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(stream));
    StringBuffer sb = new StringBuffer();
    String str = null;
    while ((str = br.readLine()) != null) {
        sb.append(str);
    }
    return sb.toString();
}

}

//AFragment的xml

<?xml version="1.0" encoding="utf-8"?>

<com.zhuyue.dell.mylibrary.view.XListView
    android:id="@+id/X_ListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

AFragment的类

package com.zhuyue.dell.monilianxi;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.gson.Gson;
import com.zhuyue.dell.monilianxi.Aadapter.MyAdapter;
import com.zhuyue.dell.monilianxi.bean.Json;
import com.zhuyue.dell.monilianxi.utils.HttpUtils;
import com.zhuyue.dell.mylibrary.view.XListView;

import java.util.ArrayList;

/**

  • A simple {@link Fragment} subclass.
    */
    public class AFragment extends Fragment implements XListView.IXListViewListener {

    private String mUrl = “http://www.xieast.com/api/news/news.php?page=”;
    private int index = 1;
    private View mView;
    private ArrayList<Json.DataBean> mList = new ArrayList<>();
    private XListView X_ListView;
    private MyAdapter mAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    mView = inflater.inflate(R.layout.fragment_a, container, false);

     initView(mView);
     mAdapter=new MyAdapter(mList,getActivity());
      X_ListView.setAdapter(mAdapter);
      new MyTask().execute(mUrl+index);
     return mView;
    

    }

    private void initView(View mView) {
    X_ListView = mView.findViewById(R.id.X_ListView);
    X_ListView.setPullLoadEnable(true);
    X_ListView.setXListViewListener(this);
    }

    @Override
    public void onRefresh() {
    mList.clear();
    index=1;
    new MyTask().execute(mUrl+index);

    }
    public void stop(){
    X_ListView.stopRefresh();
    X_ListView.stopLoadMore();
    X_ListView.setRefreshTime(“刚刚”);

    }

    @Override
    public void onLoadMore() {
    index++;
    new MyTask().execute(mUrl+index);

    }
    class MyTask extends AsyncTask<String,Void,ArrayList<Json.DataBean>>{

     @Override
     protected ArrayList<Json.DataBean> doInBackground(String... strings) {
         try {
             String s = HttpUtils.get(strings[0]);
             Gson gson = new Gson();
             Json json = gson.fromJson(s, Json.class);
             return (ArrayList<Json.DataBean>)json.getData();
         } catch (Exception e) {
             e.printStackTrace();
         }
    
         return null;
     }
    
     @Override
     protected void onPostExecute(ArrayList<Json.DataBean> dataBeans) {
         mList.addAll(dataBeans);
         mAdapter.notifyDataSetChanged();
         stop();
    
     }
    

    }
    }

//AFragment的适配器
package com.zhuyue.dell.monilianxi.Aadapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import com.zhuyue.dell.monilianxi.R;
import com.zhuyue.dell.monilianxi.bean.Json;

import java.util.ArrayList;

public class MyAdapter extends BaseAdapter {
private final int ITEM_ONE = 0;
private final int ITEM_TWO = 1;
private ArrayList<Json.DataBean> mList;
private Context mContext;
private ImageLoader mImageLoader = ImageLoader.getInstance();
private DisplayImageOptions mDisplayImageOp;

public MyAdapter(ArrayList<Json.DataBean> mList, Context mContext) {
    this.mList = mList;
    this.mContext = mContext;
    mDisplayImageOp = new DisplayImageOptions.Builder()
            .showStubImage(R.drawable.ic_launcher)
            .showImageForEmptyUri(R.mipmap.ic_launcher)
            .showImageOnFail(R.drawable.ic_launcher)
            .cacheInMemory(true)
            .cacheOnDisc(true)
            .bitmapConfig(Bitmap.Config.ARGB_8888)
            .displayer(new CircleBitmapDisplayer())
            .build();
}

@Override
public int getCount() {
    return mList.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) {
    HolderOne one = null;
    HolderTwo two = null;
    int type = getItemViewType(position);
    Json.DataBean dataBean = mList.get(position);
    switch (type) {
        case ITEM_ONE:
            if (convertView == null) {
                one = new HolderOne();
                convertView = View.inflate(mContext, R.layout.item_one, null);
                one.mNameOne = convertView.findViewById(R.id.Item_One_Text);
                one.mImageOne = convertView.findViewById(R.id.Item_One_Image);
                convertView.setTag(one);
            } else {
                one = (HolderOne) convertView.getTag();
            }
            one.mNameOne.setText(dataBean.getTitle() + "");
            mImageLoader.displayImage(dataBean.getThumbnail_pic_s(), one.mImageOne, mDisplayImageOp);
            break;
        case ITEM_TWO:
            if (convertView == null) {
                two = new HolderTwo();
                convertView = View.inflate(mContext, R.layout.item_two, null);
                two.mNameTwo = convertView.findViewById(R.id.Item_Two_Text);
                two.mImageTwo = convertView.findViewById(R.id.Item_Two_Image);
                convertView.setTag(two);
            } else {
                two= (HolderTwo) convertView.getTag();
            }
            two.mNameTwo.setText(dataBean.getTitle()+"");
            mImageLoader.displayImage(dataBean.getThumbnail_pic_s(),two.mImageTwo,mDisplayImageOp);
            break;
    }

    return convertView;
}

@Override
public int getItemViewType(int position) {
    if (position % 2 == 0) {
        return ITEM_ONE;
    } else {
        return ITEM_TWO;
    }
}

@Override
public int getViewTypeCount() {
    return 2;
}

class HolderOne {
    private TextView mNameOne;
    private ImageView mImageOne;
}

class HolderTwo {
    private TextView mNameTwo;
    private ImageView mImageTwo;
}

}

//适配器的xml
//item_one

<?xml version="1.0" encoding="utf-8"?>

<ImageView
    android:id="@+id/Item_One_Image"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:src="@mipmap/ic_launcher_round" />

<TextView
    android:id="@+id/Item_One_Text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="heheda" />
//item_two <?xml version="1.0" encoding="utf-8"?>
<TextView
    android:id="@+id/Item_Two_Text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="heheda" />

<ImageView
    android:id="@+id/Item_Two_Image"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:src="@mipmap/ic_launcher_round" />

//BFragment的xml

<?xml version="1.0" encoding="utf-8"?>

<!-- TODO: Update blank fragment layout -->
<android.support.design.widget.TabLayout
    android:id="@+id/BFrag_Tab"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
<android.support.v4.view.ViewPager
    android:id="@+id/BFrag_Pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/BFrag_Tab"/>

//BFragment的类
package com.zhuyue.dell.monilianxi;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.zhuyue.dell.monilianxi.Badapter.MyPagerAdapter;

import java.util.ArrayList;

/**

  • A simple {@link Fragment} subclass.
    */
    public class BFragment extends Fragment {
    private View mView;
    private TabLayout BFage_Tab;
    private ViewPager BFage_Pager;
    private ArrayList mList = new ArrayList<>();
    private ArrayList mTitle = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    mView = inflater.inflate(R.layout.fragment_b, container, false);
    initData();
    initView(mView);
    return mView;
    }

    private void initData() {
    mList.add(new AFragment());
    mList.add(new AFragment());
    mTitle.add(“新闻”);
    mTitle.add(“娱乐”);
    }

    private void initView(View mView) {
    BFage_Tab = mView.findViewById(R.id.BFrag_Tab);
    BFage_Pager = mView.findViewById(R.id.BFrag_Pager);
    BFage_Pager.setAdapter(new MyPagerAdapter(getChildFragmentManager(), mList, mTitle));
    BFage_Tab.setupWithViewPager(BFage_Pager);

    }

}
//menu文件 的main.xml

<?xml version="1.0" encoding="utf-8"?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值