Closed dpc761218914 closed 7 years ago
@dpc761218914 能麻烦完整贴下配置代码吗,这边从这点配置无法看出是否是库有BUG。 代码格式化需要3个“`”开始,中间放代码,3个“`”结束。这样代码就能正常格式化显示了。
代码格式化忘记了,感谢提醒,具体代码如下,就是通过recycleView分页加载数据~,使用okhttp访问网络,post的招聘类型city和页数page分页获取数据~
package com.syjob.jx;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
import com.syjob.adapter.JobAdapter;
import com.syjob.api.Api;
import com.syjob.bean.JxJob;
import com.syjob.bean.JxJobRecord;
import com.syjob.utils.Constant;
import com.syjob.utils.JsonUtils;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import me.dkzwm.widget.srl.MaterialSmoothRefreshLayout;
import me.dkzwm.widget.srl.RefreshingListenerAdapter;
import okhttp3.Call;
import okhttp3.Response;
public class Main2Activity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private ArrayList<JxJob> datas;
private JxJobRecord jxJobRecord;
private RecyclerView recycler;
private MaterialSmoothRefreshLayout mRefreshLayout;
private JobAdapter adapter;
private Handler mHandler = new Handler();
//默认城市
private String city;
//初始化第一页
private int page=1;
private ProgressDialog waitingDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initView();
initData();
initEvent();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
private void initView(){
waitingDialog= new ProgressDialog(Main2Activity.this);
waitingDialog.setTitle("主人别着急");
waitingDialog.setMessage("我正在努力加载~...");
waitingDialog.setIndeterminate(true);
waitingDialog.setCancelable(false);
recycler=(RecyclerView) findViewById(R.id.line_recycler2);
recycler.setLayoutManager(new LinearLayoutManager(this));
recycler.setHasFixedSize(true);
city="jiangxi";
datas=new ArrayList<JxJob>();
mRefreshLayout = (MaterialSmoothRefreshLayout) findViewById(R.id.smoothRefreshLayout2);
mRefreshLayout.setDisableLoadMore(false);
mRefreshLayout.materialStyle();
mRefreshLayout.setEnableScrollToBottomAutoLoadMore(true);
mRefreshLayout.setOnRefreshListener(new RefreshingListenerAdapter() {
@Override
public void onRefreshBegin(final boolean isRefresh) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//下拉刷新
if (isRefresh) {
Toast.makeText(Main2Activity.this,"下拉刷新~~~",Toast.LENGTH_SHORT).show();
initData();
page=page+1;
//加载更多
} else {
Toast.makeText(Main2Activity.this,"上拉加载更多"+page,Toast.LENGTH_SHORT).show();
//获取更多数据
getMoreData();
page=page+1;
// Toast.makeText(MainActivity.this,"加载更多",Toast.LENGTH_SHORT).show();
}
mRefreshLayout.refreshComplete();
}
}, 1000);
}
});
mRefreshLayout.autoRefresh(false);
}
/*初始化获取网络数据*/
private void initData(){
waitingDialog.show();
/*构造请求体*/
HashMap<String, String> params = new HashMap<>();
params.put("city", city);
params.put("page", page+"");
JSONObject jsonObject = new JSONObject(params);
/*获取请假记录*/
OkGo.post(Api.get_ShiYeDanWeis)//
.tag(this)//
.upJson(jsonObject.toString())//
.execute(new StringCallback() {
@Override
public void onSuccess(String s, Call call, Response response) {
//Toast.makeText(MainActivity.this,"测试成功",Toast.LENGTH_SHORT).show();
/*关闭提示框*/
jxJobRecord=new JxJobRecord();
jxJobRecord= JsonUtils.fromJson(s,JxJobRecord.class);
if(jxJobRecord.getStatus().equals(Constant.SUCCESS)){
//切换城市的时候需要先清空内容
if(datas.size()>0){
datas.clear();
}
datas.addAll(jxJobRecord.getMsg());
if(datas==null || datas.size()<=0){
Toast.makeText(Main2Activity.this,"无记录...",Toast.LENGTH_SHORT).show();
}else{
//Toast.makeText(MainActivity.this,shiYeDanWeiRecord.getMsg().size()+"",Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged();
waitingDialog.dismiss();
}
}else{
Toast.makeText(Main2Activity.this,"系统错误,请稍后再试...",Toast.LENGTH_SHORT).show();
return;
}
}
});
}
private void initEvent() {
LinearLayoutManager mLayoutManager=new LinearLayoutManager(this);
recycler.setLayoutManager(mLayoutManager);
adapter=new JobAdapter(datas,Main2Activity.this);
recycler.setAdapter(adapter);
recycler.setItemAnimator(new DefaultItemAnimator());
}
/*下拉加载更多网络数据*/
private void getMoreData(){
waitingDialog.show();
/*构造请求体*/
HashMap<String, String> params = new HashMap<>();
params.put("city", city);
params.put("page", page+"");
JSONObject jsonObject = new JSONObject(params);
/*获取请假记录*/
OkGo.post(Api.get_ShiYeDanWeis)//
.tag(this)//
.upJson(jsonObject.toString())//
.execute(new StringCallback() {
@Override
public void onSuccess(String s, Call call, Response response) {
//Toast.makeText(MainActivity.this,"测试成功",Toast.LENGTH_SHORT).show();
/*关闭提示框*/
jxJobRecord=new JxJobRecord();
jxJobRecord= JsonUtils.fromJson(s,JxJobRecord.class);
if(jxJobRecord.getStatus().equals(Constant.SUCCESS)){
datas.addAll(jxJobRecord.getMsg());
if(datas==null || datas.size()<=0){
Toast.makeText(Main2Activity.this,"已经到最底层...",Toast.LENGTH_SHORT).show();
}else{
//加载数据成功后,定位到底部还没有实现
//Toast.makeText(MainActivity.this,shiYeDanWeiRecord.getMsg().size()+"",Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged();
//adapter.notifyItemInserted(datas.size());
//recycler.smoothScrollToPosition(datas.size()-11);
waitingDialog.dismiss();
}
}else{
Toast.makeText(Main2Activity.this,"系统错误,请稍后再试...",Toast.LENGTH_SHORT).show();
return;
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//四个参数的含义。1,group的id,2,item的id,3,是否排序,4,将要显示的内容
menu.add(0,1,0,"全省");
menu.add(0,2,0,"南昌");
menu.add(0,3,0,"九江");
menu.add(0,4,0,"上饶");
menu.add(0,5,0,"萍乡");
menu.add(0,6,0,"鹰潭");
menu.add(0,7,0,"赣州");
menu.add(0,8,0,"宜春");
menu.add(0,9,0,"景德镇");
menu.add(0,10,0,"吉安");
menu.add(0,11,0,"抚州");
menu.add(0,12,0,"新余");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//页数需要从第一页开始算~
page=1;
switch (item.getItemId()){
case 1:
city="jiangxi";
initData();
break;
case 2:
city="nanchang";
initData();
break;
case 3:
city="jiujiang";
initData();
break;
case 4:
city="shangrao";
initData();
break;
case 5:
city="pingxiang";
initData();
break;
case 6:
city="yingtan";
initData();
break;
case 7:
city="ganzhou";
initData();
break;
case 8:
city="yichun";
initData();
break;
case 9:
city="jingdezhen";
initData();
break;
case 10:
city="jian";
initData();
case 11:
city="fuzhou";
initData();
break;
case 12:
city="xinyu";
initData();
break;
}
return true;
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_share) {
Toast.makeText(Main2Activity.this,"分享APP",Toast.LENGTH_SHORT).show();
} else if (id == R.id.nav_about) {
Toast.makeText(Main2Activity.this,"关于我们",Toast.LENGTH_SHORT).show();
showNormalDialog();
}else if (id == R.id.nav_version) {
showVersionlDialog();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
//弹出关于我们对话框~
private void showNormalDialog(){
/* @setIcon 设置对话框图标
* @setTitle 设置对话框标题
* @setMessage 设置对话框消息提示
* setXXX方法返回Dialog对象,因此可以链式设置属性
*/
final AlertDialog.Builder normalDialog =
new AlertDialog.Builder(Main2Activity.this);
normalDialog.setIcon(R.mipmap.logo);
normalDialog.setTitle("关于我们");
normalDialog.setMessage("我是不是一个还不错的江西省事业单位招聘信息APP呢?");
normalDialog.setPositiveButton("已了解",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//...To-do
}
});
// 显示
normalDialog.show();
}
//弹出版本校验对话框~
private void showVersionlDialog(){
/* @setIcon 设置对话框图标
* @setTitle 设置对话框标题
* @setMessage 设置对话框消息提示
* setXXX方法返回Dialog对象,因此可以链式设置属性
*/
final AlertDialog.Builder normalDialog =
new AlertDialog.Builder(Main2Activity.this);
normalDialog.setIcon(R.mipmap.logo);
normalDialog.setTitle("当前版本");
normalDialog.setMessage("江西事业单位招聘 V0.0.1");
normalDialog.setPositiveButton("已了解",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//...To-do
}
});
// 显示
normalDialog.show();
}
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
}
}
现在的问题是上拉加载更多的时候,会刷新两次~~~尴尬了
@dpc761218914 你应该在网络请求完成后数据更新了才refreshComplete()
,代码逻辑上有点问题。
@dpc761218914 Demo的代码是不想接入网络请求进行的模拟数据请求,真实的应该是在onRefreshBegin(boolean isRefresh)
里进行网络请求,在OKHttp的onSuccess
里进行refreshComplete()
感谢,按照您的解释解决了,效果很好~ 看了一下API
refreshComplete | 无参 | 刷新完成,且设置最后一次刷新状态为成功 |
---|
不是很理解。
@dpc761218914 这个的意思是让RefreshLayout完成刷新,重置内部状态到初始状态以备下次手指触摸能够触发刷新。设置最后一次刷新状态为成功是表示完成刷新时是成功的,这个只是提供一个标志给刷新视图用以展示是否刷新成功用的。例如QQ的上一版本下拉刷新在刷新视图中就有刷新成功
和刷新失败
的提示。假如网络请求成功那么可以设置为true
,如果网络请求失败可以设置为false
。库里集成的刷新视图中ClassicHeader
是实现了这样的需求的。
好的,非常感谢~,学习了
@dpc761218914 没问题的话,麻烦关闭下issue,谢谢
感谢
项目已star
不知为何上拉加载更多为何每次都会执行两次? 其中if里面是下拉刷新吧?而else里面执行加载更多吧??
抱歉,不知为何github不能格式化代码···