数据缓存+listview分页加载+日夜间模式切换
来源:互联网 发布:python 量化交易策略 编辑:程序博客网 时间:2024/06/14 08:56
MainActivity类:
public class MainActivity extends AppCompatActivity { private ListView lv; //选择的数据类型 private int type = 1; //需要几项数据 private int p = 3; //ListView适配器 private Myadapter adapter; //夜间模式 private Button btnnight; //数据库操作 private UserDao userDao; //定义要加载几项 private int index = 1; //滑动 private ScrollView scroll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Themutils.onActivityCreateSetTheme(this); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); btnnight = (Button) findViewById(R.id.btnnight); userDao = new UserDao(this); //listview滑动监听 lv.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == SCROLL_STATE_IDLE) { if (view.getLastVisiblePosition() == view.getCount() - 1) { System.out.println("++++++++++++++++++++++花到最后一个"); index++; getData("http://api.expoon.com/AppNews/getNewsList/type/" + index + "/p/1"); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); //夜间模式 btnnight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Themutils.ChangeCurrentTheme(MainActivity.this); } });//APP进入就判断网络 if (NetWorkUtils.isConnection(this)) { System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!有网"); getData("http://api.expoon.com/AppNews/getNewsList/type/" + type + "/p/1"); } else { System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!没网"); //如果没网就查询数据库里面的数据 ArrayList<Bean.DataBean> select = userDao.select(); //添加适配器 adapter = new Myadapter(select); lv.setAdapter(adapter); //每个item的高度需要重新顶一下 Utility.setListHeight(lv); }// for (int i=0;i<10;i++){//////// list.add();////// }// lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list));// Utility.setListHeight(lv); } //ListView适配器 private class Myadapter extends BaseAdapter { private List<Bean.DataBean> data; private ViewHolder viewholder; public Myadapter(List<Bean.DataBean> data) { this.data = data; } //查询数据库调用的方法 void loadMore(List<Bean.DataBean> data2) { for (Bean.DataBean bean : data2) { data.add(bean); } } //图片缓存类 DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheOnDisk(true) .cacheInMemory(true) .build(); @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //ListView优化 if (convertView == null) { convertView = convertView.inflate(MainActivity.this, R.layout.activity_youhua, null); viewholder = new ViewHolder(); viewholder.imageView = (ImageView) convertView.findViewById(R.id.img); viewholder.textView = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(viewholder); } else { viewholder = (ViewHolder) convertView.getTag(); } viewholder.textView.setText(data.get(position).getNews_title()); ImageLoader.getInstance().displayImage(data.get(position).getPic_url(), viewholder.imageView, options); return convertView; } class ViewHolder { TextView textView; ImageView imageView; } } //使用异步加载数据 private void getData(String path) { System.out.println("*******************************getData"); new AsyncTask<String, Void, String>() { @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (s == null) return; // 解析Json Gson gson = new Gson(); Bean bean = gson.fromJson(s, Bean.class); List<Bean.DataBean> data = bean.getData(); userDao.add(bean); //有网络加载数据,没网络加载数据库里面的数据 if (adapter == null) { adapter = new Myadapter(data); lv.setAdapter(adapter); Utility.setListHeight(lv); } else { adapter.loadMore(data); adapter.notifyDataSetChanged(); } } //使用httpConnection方式在后台加载数据 @Override protected String doInBackground(String... params) { System.out.println("*******************************doInBackground"); try { String path = params[0]; URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); int code = connection.getResponseCode(); if (code == 200) { System.out.println("*******************************code"); InputStream is = connection.getInputStream(); String json = ReadFile.readfromFile(is); System.out.println("===============" + json); return json; } } catch (Exception e) { e.printStackTrace(); } return null; } }.execute(path); }}
网络判断类:
public class NetWorkUtils { /** * 检查设备网络是否连接 * * @return */ public static boolean isConnection(Context context) { //得到管理网络的服务实例 ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); //得到网络信息 (判断网络是否连接、3G、4G) NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); //判断网络是否已经连接,如果连接的话,返回true,否则false return (networkInfo != null && networkInfo.isConnected()); }}
图片缓存类:
public class App extends Application { @Override public void onCreate() { super.onCreate(); String path= Environment.getExternalStorageDirectory().getPath()+"/hehe"; File file=new File(path); ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(this) .memoryCacheSize(2*1024*1024) .memoryCacheExtraOptions(400,400) .threadPoolSize(3) .threadPriority(100) .diskCache(new UnlimitedDiskCache(file)) .diskCacheFileCount(50) .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .diskCacheSize(50*1024*1024) .build(); ImageLoader.getInstance().init(config); }}
创建数据库类:
public class SqliteDB extends SQLiteOpenHelper { public SqliteDB(Context context) { super(context, "user.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table ku(news_id Integer,news_summary varchar(300),news_title varchar(300),pic_url varchar(300))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
滑动页面的算法类:
public class Utility { public static void setListHeight(ListView listview) { // 重新计算下Listview的高度 ListAdapter adapter = listview.getAdapter(); if (adapter == null) { return; } // 统计listview的总高度 int totalHeight = 0; for (int i = 0; i < adapter.getCount(); i++) { // 拿到一条item视图 View view = adapter.getView(i, null, listview); // 重新计算一个一条item的宽高 view.measure(0, 0); // 把这条view的高度加到总高度上 totalHeight += view.getMeasuredHeight(); } // item的总高度加上间隔线的总高度 totalHeight += listview.getDividerHeight() * (adapter.getCount() - 1); ViewGroup.LayoutParams params = listview.getLayoutParams(); params.height = totalHeight; listview.setLayoutParams(params); }}
夜间模式:public class Themutils { private static int theme = 0; private static final int DAY_THEME = 0; private static final int NIGHT_THEME = 1; public static void onActivityCreateSetTheme(Activity activity) { switch (theme) { case DAY_THEME: activity.setTheme(R.style.day_theme); break; case NIGHT_THEME: activity.setTheme(R.style.night_theme); break; } } public static void ChangeCurrentTheme(Activity activity) { switch (theme) { case DAY_THEME: theme = NIGHT_THEME; break; case NIGHT_THEME: theme = DAY_THEME; break; } activity.finish(); activity.startActivity(new Intent(activity, activity.getClass())); }}
配置权限:
<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
android:theme="@style/day_theme"
android:name=".App"
阅读全文
0 0
- 2、数据缓存+listview分页加载+日夜间模式切换
- 数据缓存+listview分页加载+日夜间模式切换
- 数据缓存+listview分页加载+日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- 日夜间模式切换
- listview设置OnScrollListener分页加载,日夜间模式,判断无网用数据库显示
- Android 切换日夜间模式
- 日夜间模式的切换
- 轻松切换日夜间模式
- mySQL安装后服务无法启动
- 聊天室的实现(消息实时刷新)
- (Ubuntu系列)——Linux下软件的安装与卸载(命令行模式)
- jquery实现图片拖动
- django学习之路(四)开发微信公众号
- 数据缓存+listview分页加载+日夜间模式切换
- 网络请求 + imageloader
- 获取天气预报
- 英语分享总结
- 机器学习&深度学习&大数据&数据库 学习资料
- 欢迎使用CSDN-markdown编辑器
- FP-growth算法,高效发现频繁项集,找出最短时序路径
- NOIP2014-普及组复赛-第1题-珠心算测验
- ThreadLocal用法详解和原理