要实现的功能
要实现的样式(很丑)


具体实现
SwipeRefreshLayout layout = (SwipeRefreshLayout)findViewById(R.id.activity_main);
layout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener(){
@Override
public void onRefresh()
{ 请求接收数据 }
});
List<String> list = new ArrayList<>();
ListView listView;
JSONArray array = new JSONArray((String)message.obj);
for(int i = 0; i < array.length(); i++)
{
JSONObject jsonObject = array.getJSONObject(i);
String result = jsonObject.getString("message");
list.add(result);
}
listView.setAdapter( new ..... );
RequestQueuequeue=Volley.newRequestQueue(MainActivity.this);
StringRequest mRequest = new StringRequest(
"接收的接口",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Handler message =......
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error{
handler.sendEmptyMessage(0);
}
});
queue.add(mRequest);
RequestQueue queue = Volley.newRequestQueue(SendMessage.this);
StringRequest request = new StringRequest(
Request.Method.POST,
"发送的接口",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams()
throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("json",result);
return map;
}
};
queue.add(request);
实现过程中遇到的一些问题
- 自定义 Adapter
没有合适的 Adapter 来加载 List 对象
这里要自定义一个 Adapter 类,主要来修改 Adapter 中的 getView() 方法
代码实现:
public class LISTAdapter extends BaseAdapter{
private List<String> list;
private Context context;
public LISTAdapter(List<String> list, Context context)
{
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView
(int position, View convertView, ViewGroup parent) {
View view =
LayoutInflater.from(context).inflate
(R.layout.item_view, parent, false);
TextView textView =
(TextView)view.findViewById(R.id.text_view);
textView.setText(list.get(position));
return view;
}
}
- ListView 与 SwipeRefreshLayout 下拉刷新的冲突
使用 ListView 的时候使用了 SwipeRefreshLayout 下拉刷新,那么 ListView 的向下滑动就会与 SwipeRefreshLayout 的下拉刷新产生冲突。
解决方法:
设置一个 ListView 的监听器:OnScrollListener,监听ListView 是否滑到了最上面的 item。
代码实现(这个方法放在 setOnRefreshListener 后面):
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged
(AbsListView absListView, int i) {
}
@Override
public void onScroll
(AbsListView absListView, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (firstVisibleItem == 0)
layout.setEnabled(true);
else
layout.setEnabled(false);
}
});
未解决问题
- 还是 SwipeRefreshLayout 的刷新问题
刷新一次之后如果再次刷新就会重新加载出来一组数据,如果用禁止刷新,发送数据之后的话便无法刷新加载新发送的数据。尴尬……