做一个简易的留言栏

本文介绍了一个移动端应用中实现下拉刷新加载数据、留言上传功能的具体步骤。包括使用SwipeRefreshLayout进行下拉刷新、JSON数据解析、自定义Adapter适配器、解决ListView与SwipeRefreshLayout冲突等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要实现的功能


要实现的样式(很丑)

  • 接收界面


  • 发送界面

具体实现

  • 下拉刷新代码
SwipeRefreshLayout layout = (SwipeRefreshLayout)findViewById(R.id.activity_main);

layout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener(){

    @Override
    public void onRefresh() 
    { 请求接收数据 }

});

  • JSON解析代码
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);

  • 发送数据代码(键值对上传,键名必须为json)
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 的刷新问题
    刷新一次之后如果再次刷新就会重新加载出来一组数据,如果用禁止刷新,发送数据之后的话便无法刷新加载新发送的数据。尴尬……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值