public class HttpUtils {
public static String getFromHttp(String urlStr) {
String result = "";
try {
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setUseCaches(false);
connection.connect();
if (connection.getResponseCode() == 200) {
InputStream is = connection.getInputStream();
result = getStringFromInputStream(is);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private static String getStringFromInputStream(InputStream is) {
String result = "";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int length = -1;
byte[] buffer = new byte[1024];
try {
while ((length = is.read(buffer, 0, buffer.length)) != -1) {
baos.write(buffer, 0, length);
baos.flush();
}
result = new String(baos.toByteArray(), "UTF-8");
baos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
public class NewsAdapter extends BaseAdapter {
private static final int TYPE_ONE_PIC = 0;
private static final int TYPE_TWO_PIC = 1;
private static final int TYPE_THREE_PIC = 2;
private Context context;
private List<News.DataBean> list;
public NewsAdapter(Context context, List<News.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
News.DataBean bean = list.get(position);
if (!TextUtils.isEmpty(bean.getThumbnail03())) {
return TYPE_THREE_PIC;
} else if (!TextUtils.isEmpty(bean.getThumbnail02())) {
return TYPE_TWO_PIC;
} else {
return TYPE_ONE_PIC;
}
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder1 holder1 = null;
ViewHolder2 holder2 = null;
ViewHolder3 holder3 = null;
int type = getItemViewType(i);
switch (type) {
case TYPE_ONE_PIC:
if (view == null) {
holder1 = new ViewHolder1();
view = View.inflate(context, R.layout.item_news_01, null);
holder1.imgLogo1 = view.findViewById(R.id.img_logo1);
holder1.txtTitle = view.findViewById(R.id.txt_title);
holder1.txtAuthor = view.findViewById(R.id.txt_author);
holder1.txtTime = view.findViewById(R.id.txt_time);
view.setTag(holder1);
} else {
holder1 = (ViewHolder1) view.getTag();
}
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail01(), holder1.imgLogo1);
holder1.txtTitle.setText(list.get(i).getTitle());
holder1.txtAuthor.setText(list.get(i).getAuthorName());
holder1.txtTime.setText(list.get(i).getDate());
break;
case TYPE_TWO_PIC:
if (view == null) {
holder2 = new ViewHolder2();
view = View.inflate(context, R.layout.item_news_02, null);
holder2.imgLogo1 = view.findViewById(R.id.img_logo1);
holder2.imgLogo2 = view.findViewById(R.id.img_logo2);
holder2.txtTitle = view.findViewById(R.id.txt_title);
holder2.txtAuthor = view.findViewById(R.id.txt_author);
holder2.txtTime = view.findViewById(R.id.txt_time);
view.setTag(holder2);
} else {
holder2 = (ViewHolder2) view.getTag();
}
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail01(), holder2.imgLogo1);
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail02(), holder2.imgLogo2);
holder2.txtTitle.setText(list.get(i).getTitle());
holder2.txtAuthor.setText(list.get(i).getAuthorName());
holder2.txtTime.setText(list.get(i).getDate());
break;
case TYPE_THREE_PIC:
if (view == null) {
holder3 = new ViewHolder3();
view = View.inflate(context, R.layout.item_news_03, null);
holder3.imgLogo1 = view.findViewById(R.id.img_logo1);
holder3.imgLogo2 = view.findViewById(R.id.img_logo2);
holder3.imgLogo3 = view.findViewById(R.id.img_logo3);
holder3.txtTitle = view.findViewById(R.id.txt_title);
holder3.txtAuthor = view.findViewById(R.id.txt_author);
holder3.txtTime = view.findViewById(R.id.txt_time);
view.setTag(holder3);
} else {
holder3 = (ViewHolder3) view.getTag();
}
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail01(), holder3.imgLogo1);
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail02(), holder3.imgLogo2);
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail03(), holder3.imgLogo3);
holder3.txtTitle.setText(list.get(i).getTitle());
holder3.txtAuthor.setText(list.get(i).getAuthorName());
holder3.txtTime.setText(list.get(i).getDate());
break;
}
return view;
}
class ViewHolder1 {
ImageView imgLogo1;
TextView txtTitle;
TextView txtAuthor;
TextView txtTime;
}
class ViewHolder2 {
TextView txtTitle;
TextView txtAuthor;
TextView txtTime;
ImageView imgLogo1;
ImageView imgLogo2;
}
class ViewHolder3 {
TextView txtTitle;
TextView txtAuthor;
TextView txtTime;
ImageView imgLogo1;
ImageView imgLogo2;
ImageView imgLogo3;
}
}
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.build();
ImageLoader.getInstance().init(configuration);
}
}
public class NewsFragment extends Fragment {
private XListView xlvNews;
private static final String NEWS_URL = "http://www.xieast.com/api/news/news.php?page=";
private int page = 1;
private static final String FLAG = "argument";
private boolean isLoadMore = false;
private NewsAdapter newsAdapter;
private List<News.DataBean> list;
private Handler handler = new Handler();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news, container, false);
initView(view);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
list = new ArrayList<>();
newsAdapter = new NewsAdapter(getActivity(), list);
xlvNews.setAdapter(newsAdapter);
xlvNews.setPullRefreshEnable(true);
xlvNews.setPullLoadEnable(true);
xlvNews.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
page = 1;
isLoadMore = false;
getData(page);
handler.postDelayed(new Runnable() {
@Override
public void run() {
xlvNews.stopRefresh();
}
}, 2000);
}
@Override
public void onLoadMore() {
page++;
isLoadMore = true;
getData(page);
handler.postDelayed(new Runnable() {
@Override
public void run() {
xlvNews.stopLoadMore();
}
}, 2000);
}
});
getData(page);
}
@SuppressLint("StaticFieldLeak")
private void getData(int page) {
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return HttpUtils.getFromHttp(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) {
if (news.getData().size() != 0) {
if (!isLoadMore) {
list.clear();
}
list.addAll(news.getData());
newsAdapter.notifyDataSetChanged();
}
}
}
}.execute(NEWS_URL + page);
}
public static NewsFragment newInstance(String str) {
NewsFragment newsFragment = new NewsFragment();
Bundle bundle = new Bundle();
bundle.putString(FLAG, str);
newsFragment.setArguments(bundle);
return newsFragment;
}
private void initView(View view) {
xlvNews = view.findViewById(R.id.xlv_news);
}
}
public class MainActivity extends AppCompatActivity {
private TabLayout tblNews;
private ViewPager vpNews;
private List<String> titles;
private List<Fragment> fragmentList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
titles = new ArrayList<>();
titles.add("热门");
titles.add("推荐");
titles.add("新闻");
fragmentList = new ArrayList<>();
for (String title : titles) {
// 和ViewPager配合使用的时候不需要添加这句话,只需要重写ViewPager适配器的getPageTitle方法
tblNews.addTab(tblNews.newTab().setText(title));
// NewsFragment newsFragment = NewsFragment.newInstance(title);
fragmentList.add(new NewsFragment());
}
// 设置TabLayout的模式是超出屏幕可滑动,不超出就显示在左侧
// tblNews.setTabMode(TabLayout.MODE_SCROLLABLE);
// 设置固定模式,默认
tblNews.setTabMode(TabLayout.MODE_FIXED);
// 设置标签的文本颜色
tblNews.setTabTextColors(ColorStateList.valueOf(Color.BLACK));
vpNews.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
/**
* TabLayout上显示的文字
* @param position
* @return
*/
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
});
tblNews.setupWithViewPager(vpNews);
}
private void initView() {
tblNews = findViewById(R.id.tbl_news);
vpNews = findViewById(R.id.vp_news);
}
}