簡單基類抽取+http服務+上拉載入下拉重新整理
阿新 • • 發佈:2018-12-10
//BaseActivity
public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(initLayout()); //初始化控制元件 initView(); //設定資料 getNews(); } /** * 設定佈局 * * @return 佈局檔案 */ protected abstract int initLayout(); /** * 初始化控制元件 */ protected abstract void initView(); /** * 設定資料 */ protected abstract void getNews(); }
//主Activity
public class MainActivity extends BaseActivity implements View.OnClickListener { private ViewPager view_pager; private ArrayList<Fragment> fragmentlist; private Button btn_1,btn_2,btn_3,btn_4,btn_5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //建立集合 fragmentlist = new ArrayList<>(); OneFragment oneFragment = new OneFragment(); TwoFragment twoFragment = new TwoFragment(); ThreeFragment threeFragment = new ThreeFragment(); FourFragment fourFragment = new FourFragment(); FiveFragment fiveFragment = new FiveFragment(); fragmentlist.add(oneFragment); fragmentlist.add(twoFragment); fragmentlist.add(threeFragment); fragmentlist.add(fourFragment); fragmentlist.add(fiveFragment); //設定監聽 view_pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int i) { return fragmentlist.get(i); } @Override public int getCount() { return fragmentlist.size(); } }); btn_1.setOnClickListener(this); btn_2.setOnClickListener(this); btn_3.setOnClickListener(this); btn_4.setOnClickListener(this); btn_5.setOnClickListener(this); } @Override protected int initLayout() { return R.layout.activity_main; } @Override protected void initView() { //初始化控制元件 view_pager = findViewById(R.id.view_pager); btn_1 = findViewById(R.id.bnt_1); btn_2=findViewById(R.id.bnt_2); btn_3=findViewById(R.id.bnt_3); btn_4=findViewById(R.id.bnt_4); btn_5=findViewById(R.id.bnt_5); //初始化資料 view_pager.setOffscreenPageLimit(4); } @Override protected void getNews() { // } @Override public void onClick(View v) { switch (v.getId()){ case R.id.bnt_1: view_pager.setCurrentItem(0); break; case R.id.bnt_2: view_pager.setCurrentItem(1); break; case R.id.bnt_3: view_pager.setCurrentItem(2); break; case R.id.bnt_4: view_pager.setCurrentItem(3); break; case R.id.bnt_5: view_pager.setCurrentItem(4); break; } } }
//BaseFragment
public abstract class BaseFragment extends Fragment { //view 建立完成回撥 @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(view); getDatas(); } abstract void initView(View view); abstract void getDatas(); }
//ImageLoader
public class BaseApplication extends Application { private File file; private DiskCache diskCache; @Override public void onCreate() { super.onCreate(); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File rootSD = Environment.getExternalStorageDirectory(); file = new File(rootSD, "imagefile"); if (!file.exists()){ file.mkdirs(); } } try { diskCache = new LruDiskCache(file, new Md5FileNameGenerator(), 50 * 1024 * 1024); } catch (IOException e) { e.printStackTrace(); } BitmapDisplayer displayer = new RoundedBitmapDisplayer(10); DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .bitmapConfig(Bitmap.Config.ARGB_4444) .displayer(displayer) .showImageForEmptyUri(R.mipmap.ic_launcher) .showImageOnFail(R.mipmap.ic_launcher) .showImageOnLoading(R.mipmap.ic_launcher) .build(); ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) .diskCache(diskCache) .memoryCache(new LruMemoryCache(12*1024*1024)) .threadPoolSize(3) .defaultDisplayImageOptions(options) .build(); ImageLoader.getInstance().init(configuration); } }
//http工具類
public class HttpUtil { public static String getHttpUrlConnection(String urlString){ String result = ""; try { URL url = new URL(urlString); //連線 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //優化 //請求型別 connection.setRequestMethod("GET"); connection.setDoInput(true); connection.setDoOutput(false); connection.setUseCaches(false); //超時時間 connection.setConnectTimeout(3000); connection.connect(); //獲取狀態碼 200 成功 if(connection.getResponseCode() == 200){ InputStream is = connection.getInputStream(); result = getInputStream(is); } } catch (IOException e) { e.printStackTrace(); } return result; } private static String getInputStream(InputStream is) { String result = ""; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int count = -1; byte[] buffer = new byte[1024]; while ((count = is.read(buffer,0,buffer.length)) != -1){ baos.write(buffer,0,count); baos.flush(); } result = baos.toString(); baos.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } return result; } }
//fragment碎片
public class TwoFragment extends BaseFragment { private ViewPager view_p; private TabLayout tab_layout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //初始化控制元件 View view = inflater.inflate(R.layout.fragment_two, container, false); return view; } @Override void initView(View view) { view_p= view.findViewById(R.id.viewpager); tab_layout=view.findViewById(R.id.tab_layout); initVIewPager(); } //初始DrawerLayout,ViewPager,Fragment private void initVIewPager() { ArrayList<Fragment> fragments = new ArrayList<>(); fragments.add(new ListFragment()); fragments.add(new ListtFragment()); MyPagerAdapter adapter = new MyPagerAdapter(getFragmentManager()); adapter.setFragments(fragments); view_p.setAdapter(adapter); //tabLayout指示器有幾個,建立幾個 tab_layout.addTab(tab_layout.newTab()); tab_layout.addTab(tab_layout.newTab()); //是tablayout和VIewPager tab_layout.setupWithViewPager(view_p); //給TabLayout指示器設定文字,萬物從0開始 tab_layout.getTabAt(0).setText("正在上映"); tab_layout.getTabAt(1).setText("即將上映"); } @Override void getDatas() { // } }
//資料碎片
public class ListFragment extends BaseFragment { public static final String NEWS_URL="http://172.17.8.100/movieApi/movie/v1/findHotMovieList?count=10&page="; private int page=1; private boolean isLoadMore= false; public ArrayList<News.ResultBean> list; public MyAdpater adpater; private XListView list_one; private Handler handler = new Handler(){}; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_list, container, false); return view; } @Override void initView(View view) { list_one=view.findViewById(R.id.list_viewone); //建立集合 list=new ArrayList<>(); adpater=new MyAdpater(list,getActivity()); list_one.setAdapter(adpater); //設定上拉載入下拉重新整理 list_one.setPullLoadEnable(true); list_one.setPullRefreshEnable(true); //設定Xlistview監聽事件 list_one.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() { if (page>1){ page--; }else { Toast.makeText(getActivity(),"給不了親更多資訊了!!!",Toast.LENGTH_LONG).show(); } isLoadMore=false; getDatas(); handler.postDelayed(new Runnable() { @Override public void run() { list_one.stopRefresh(); } },1000); long l = System.currentTimeMillis(); Date date = new Date(l); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); list_one.setRefreshTime(format.format(date)); } @Override public void onLoadMore() { page ++; isLoadMore = true; getDatas(); News news = new News(); ArrayList<News.ResultBean> result = (ArrayList<News.ResultBean>) news.getResult(); if (result == null){ Toast.makeText(getActivity(),"沒有更多的資料了",Toast.LENGTH_SHORT).show(); } handler.postDelayed(new Runnable() { @Override public void run() { list_one.stopLoadMore(); } },1000); } }); } @Override void getDatas() { new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... strings) { return HttpUtil.getHttpUrlConnection(strings[0]); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); News news = gson.fromJson(s, News.class); if (news != null){ ArrayList<News.ResultBean> result = (ArrayList<News.ResultBean>) news.getResult(); if (result != null){ if (!isLoadMore){ list.clear(); } list.addAll(result); adpater.notifyDataSetChanged(); } } } }.execute(NEWS_URL+page); } }
//介面卡
public class MyAdpater extends BaseAdapter { private ArrayList<News.ResultBean> list; private Context context; public MyAdpater(ArrayList<News.ResultBean> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHouder houder =null; if (convertView==null){ houder = new ViewHouder(); convertView=View.inflate(context ,R.layout.list_time,null); houder.img_view=convertView.findViewById(R.id.img_view); houder.name=convertView.findViewById(R.id.text_name); houder.title=convertView.findViewById(R.id.text_title); convertView.setTag(houder); }else { houder=(ViewHouder) convertView.getTag(); } houder.name.setText(list.get(position).getName()); houder.title.setText(list.get(position).getSummary()); ImageLoader.getInstance().displayImage(list.get(position).getImageUrl(),houder.img_view); return convertView; } class ViewHouder{ ImageView img_view; TextView name; TextView title; } }
public class MyPagerAdapter extends FragmentPagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } private List<Fragment> mFragments; //建立一個方法,接收外界傳來的Fragment的集合 public void setFragments(List<Fragment> fragments){ mFragments =fragments; } @Override public Fragment getItem(int i) { Fragment fragment = mFragments.get(i); return fragment; } @Override public int getCount() { return mFragments.size(); } }
//清單檔案
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bawei.activity"> <uses-permission android:name="android.permission.INTERNET" /> <application android:name=".BaseApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".BaseActivity"></activity> </application> </manifest>