Fragment內獲取網路資料XListView重新整理 + 多條目,判斷網路+Imageloader+佈局
阿新 • • 發佈:2018-12-17
Fragment內獲取網路資料XListView重新整理,判斷網路+獲取圖片
public class ElankFragment extends Fragment { String path = "http://www.xieast.com/api/news/news.php?page="; int page = 1; private XListView xlistview; MyAdapter myAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_elank, container, false); xlistview = view.findViewById(R.id.xlistview); myAdapter = new MyAdapter(getActivity()); xlistview.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() { page = 1; resultData(page); } @Override public void onLoadMore() { page = page+1; resultData(page); } }); xlistview.setPullRefreshEnable(true); xlistview.setPullLoadEnable(true); resultData(page); xlistview.setAdapter(myAdapter); xlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(getActivity(),SecondActivity.class); intent.putExtra("name",myAdapter.getItem(position-1).getUrl()); startActivity(intent); } }); return view; } private void resultData(final int page) { if(!has()){ Toast.makeText(getActivity(),"沒有網",Toast.LENGTH_SHORT).show(); }else { new AsyncTask<String, Void, List<Person.DataBean>>() { @Override protected List<Person.DataBean> doInBackground(String... strings) { Person person = null; String stream = new HttpUrl().httpUrl(strings[0]); person = new Gson().fromJson(stream, Person.class); return person == null ? null : person.getData(); } @Override protected void onPostExecute(List<Person.DataBean> dataBeans) { super.onPostExecute(dataBeans); if (page == 1) { myAdapter.setdata(dataBeans); } else { myAdapter.setdata1(dataBeans); } xlistview.stopRefresh(); xlistview.stopLoadMore(); } }.execute(path + page); } } private boolean has() { ConnectivityManager ss = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = ss.getActiveNetworkInfo(); return info!=null&&info.isAvailable(); } }
封裝的工具類請求資料:
public class HttpUrl{ public String httpUrl(String strings){ try { URL url = new URL(strings); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setConnectTimeout(5000); urlConnection.setReadTimeout(5000); int responseCode = urlConnection.getResponseCode(); if (responseCode == 200) { String stream = string2stream(urlConnection.getInputStream()); return stream; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } private String string2stream(InputStream is) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String get_line = ""; while ((get_line = bufferedReader.readLine())!=null){ sb.append(get_line); } return sb.toString(); } }
Imageloader新建App類:
public class App extends Application { @Override public void onCreate() { super.onCreate(); DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder() .cacheOnDisk(true) .cacheInMemory(true) .build(); ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(this) .defaultDisplayImageOptions(displayImageOptions) .build(); ImageLoader.getInstance().init(imageLoaderConfiguration); } }
Adapter的操作XListView多條目
class MyAdapter extends BaseAdapter {
List<Person.DataBean> list;
Context context;
public MyAdapter(Context context) {
this.context = context;
this.list = new ArrayList<>();
}
public void setdata(List<Person.DataBean> dataBeans) {
this.list.clear();
this.list.addAll(dataBeans);
notifyDataSetChanged();
}
public void setdata1(List<Person.DataBean> dataBeans) {
this.list.addAll(dataBeans);
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Person.DataBean getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
//這裡當資料有3張圖片的用一個佈局
//有一張資料的用另一個佈局
String s2 = list.get(position).getThumbnail_pic_s02();
String s3 = list.get(position).getThumbnail_pic_s03();
if (s2 == null && s3 == null){
return 0;
}else{
return 1;
}
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(getItemViewType(position) == 0){
Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = View.inflate(context,R.layout.item,null);
holder.textView1 = convertView.findViewById(R.id.text1);
holder.textView2 = convertView.findViewById(R.id.text2);
holder.imageView1 = convertView.findViewById(R.id.image);
convertView.setTag(holder);
}else{
holder = (Holder) convertView.getTag();
}
holder.textView1.setText(list.get(position).getTitle());
holder.textView2.setText(list.get(position).getAuthor_name());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.imageView1);
return convertView;
}else{
Holder1 holder1;
if (convertView == null) {
holder1 = new Holder1();
convertView = View.inflate(context,R.layout.item2,null);
holder1.t1 = convertView.findViewById(R.id.t1);
holder1.image1 = convertView.findViewById(R.id.image1);
holder1.image2 = convertView.findViewById(R.id.image2);
holder1.image3 = convertView.findViewById(R.id.image3);
convertView.setTag(holder1);
}else{
holder1 = (Holder1) convertView.getTag();
}
holder1.t1.setText(list.get(position).getTitle());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder1.image1);
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),holder1.image2);
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s03(),holder1.image3);
return convertView;
}
}
class Holder{
TextView textView1;
TextView textView2;
ImageView imageView1;
}
class Holder1{
TextView t1;
ImageView image1;
ImageView image2;
ImageView image3;
}
}
DrawerLayout + ViewPager + TabLayout + ActionBar
public class MainActivity extends BaseActivity{
private DrawerLayout drewarlayout;
private ViewPager viewpager;
private TabLayout tablayout;
private ActionBar actionBar;
private ActionBarDrawerToggle toggle;
@Override
protected int conview() {
return R.layout.activity_main;
}
@Override
protected void initView() {
drewarlayout = findViewById(R.id.drawerlayout);
viewpager = findViewById(R.id.viewpager);
tablayout = findViewById(R.id.tablayout);
aCtionBar();
viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int i) {
switch (i){
case 0:
return new BlankFragment();
case 1:
return new ClankFragment();
default:
return new DlankFragment();
}
}
@Override
public int getCount() {
return 3;
}
});
tablayout.addTab(tablayout.newTab());
tablayout.addTab(tablayout.newTab());
tablayout.addTab(tablayout.newTab());
tablayout.setupWithViewPager(viewpager);
tablayout.getTabAt(0).setText("關注");
tablayout.getTabAt(1).setText("訊息");
tablayout.getTabAt(2).setText("我的");
}
@Override
protected void initData() {
}
private void aCtionBar() {
actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
toggle = new ActionBarDrawerToggle(this, drewarlayout, R.string.open, R.string.close);
toggle.syncState();
drewarlayout.addDrawerListener(toggle);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(toggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
}
DrawerLayout + ViewPager + TabLayout + ActionBar 的佈局
<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"
tools:context=".MainActivity"
android:id="@+id/drawerlayout"
android:orientation="vertical"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"
android:id="@+id/viewpager"/>
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/tablayout"/>
</LinearLayout>
<fragment
class="likuo.bwie.com.likuo1.AlankFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
/>
</android.support.v4.widget.DrawerLayout>