側拉模組Viewpager+Bas類 網路請求
阿新 • • 發佈:2018-12-16
主 ViewPager Xml佈局 注意引用的是android.support.v4.widget.DrawerLayout
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/der" 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"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/tab" ></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="9" ></android.support.v4.view.ViewPager> </LinearLayout> <fragment android:id="@+id/frag" class="fengxiangbin.bwei.com.zhoukao3lian.fragment.Che" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" /> </android.support.v4.widget.DrawerLayout>
TabLayout+Viewpager+側拉
public class MainActivity extends AppCompatActivity { TabLayout tab;//一定要給側拉附ID ViewPager pager; private DrawerLayout drawerLayout; private ActionBarDrawerToggle toggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tab = findViewById(R.id.tab); pager = findViewById(R.id.pager); drawerLayout = findViewById(R.id.der); init(); initAction(); } private void initAction() { //獲取一個ActionBar物件 android.support.v7.app.ActionBar actionBar = getSupportActionBar(); //給左上角一張圖片,4.0意思預設圖片,給true就可以直接使用 actionBar.setDisplayHomeAsUpEnabled(true); //有一類提供了繫結DrawerLayout功能 toggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close); //DrawerLayout和ActionBar關聯 toggle.syncState(); drawerLayout.addDrawerListener(toggle); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (toggle.onOptionsItemSelected(item)){ return true; } return super.onOptionsItemSelected(item); } private void init() { ArrayList<Fragment> li = new ArrayList<>(); li.add(new fragment01()); li.add(new fragment02()); li.add(new fragment03()); MypagerAdaper adaper = new MypagerAdaper(getSupportFragmentManager()); adaper.setFragments(li); pager.setAdapter(adaper); tab.addTab(tab.newTab()); tab.addTab(tab.newTab()); tab.addTab(tab.newTab()); tab.setupWithViewPager(pager); tab.getTabAt(0).setText("全部"); tab.getTabAt(1).setText("國內"); tab.getTabAt(2).setText("國際"); } }
XListview Fragment繼承BaseBean類
XListView lv; NewsAdaper ad; int page = 1; private boolean isp = false; String path = "http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?count=10&page="+page+""; Handler handler = new Handler(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = View.inflate(getActivity(),R.layout.fragment_fragment01,null); lv = view.findViewById(R.id.lv); final Date data = new Date(); ad = new NewsAdaper(getActivity().getLayoutInflater()); lv.setAdapter(ad); new Thread(new Runnable() { @Override public void run() { loadDAta(); } }).start(); //上拉下拉重新整理 lv.setPullRefreshEnable(true); lv.setPullLoadEnable(true); lv.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() { page = 1; isp=false; handler.postDelayed(new Runnable() { @Override public void run() { lv.stopRefresh(); lv.setRefreshTime("剛剛"); } },2000); } @Override public void onLoadMore() { page++; isp = true; new Thread(new Runnable() { @Override public void run() { loadDAta(); } }).start(); handler.postDelayed(new Runnable() { @Override public void run() { lv.stopLoadMore(); } },2000); } }); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(getActivity(),DoubleActivity.class); intent.putExtra("im",ad.getLi().get(position-1).getImageUrl()); intent.putExtra("name",ad.getLi().get(position-1).getName()); intent.putExtra("jie",ad.getLi().get(position-1).getSummary()); startActivity(intent); } }); return view; } Handler handler1 = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if(page==1){ ad.setData((ArrayList<NewsBean.ResultBean>) msg.obj); }else{ ad.getData((ArrayList<NewsBean.ResultBean>) msg.obj); } return true; } }); private void loadDAta() { //String utils = Beasbean.getInstance().getResult(path); NewsBean newsBean = Beasbean.getInstance().getRequest2(path,NewsBean.class); handler1.sendMessage(handler1.obtainMessage(0,newsBean.getResult())); } }
Bas類
private static Beasbean instance;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public static Beasbean getInstance() {
if(instance == null) {
instance = new Beasbean();
}
return instance;
}
public NewsBean getRequest2(String requestUrl, Class clazz) {
String result = getResult(requestUrl);
return (NewsBean) new Gson().fromJson(result, clazz);
}
//網路請求
public String getResult(String s){
String getgson = null;
try {
URL url = new URL(s);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if(code==200) {
String gsonString = stream2String(connection.getInputStream());
getgson = gsonString;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return getgson;
}
private String stream2String(InputStream inputStream) {
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
try {
for (String tmp = bufferedReader.readLine(); tmp!=null; tmp=bufferedReader.readLine()) {
stringBuilder.append(tmp);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stringBuilder.toString();
}
Adaper
ArrayList<NewsBean.ResultBean> li;
LayoutInflater layoutInflater;
public NewsAdaper(LayoutInflater layoutInflater) {
li = new ArrayList<>();
this.layoutInflater = layoutInflater;
}
public ArrayList<NewsBean.ResultBean> getLi() {
return li;
}
public void setData(ArrayList<NewsBean.ResultBean> li) {
this.li.clear();
this.li.addAll(li);
notifyDataSetChanged();
}
public void getData(ArrayList<NewsBean.ResultBean> li) {
this.li.addAll(li);
notifyDataSetChanged();
}
@Override
public int getCount() {
return li.size();
}
@Override
public Object getItem(int position) {
return li.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyView mv;
if(convertView!=null){
mv = (MyView) convertView.getTag();
}else{
mv = new MyView();
convertView = layoutInflater.inflate(R.layout.item,null);
mv.image = convertView.findViewById(R.id.image);
mv.t1 = convertView.findViewById(R.id.t1);
mv.t2 = convertView.findViewById(R.id.t2);
convertView.setTag(mv);
}
ImageLoader.getInstance().displayImage(li.get(position).getImageUrl(),mv.image);
mv.t1.setText(li.get(position).getName());
mv.t2.setText(li.get(position).getSummary());
return convertView;
}
class MyView{
ImageView image;
TextView t1;
TextView t2;
}
Image
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(configuration);
需要匯入的資料
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:support-v13:27.1.1'