RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 581642
Accepted
lounah
lounah
Asked:2020-10-23 17:44:18 +0000 UTC2020-10-23 17:44:18 +0000 UTC 2020-10-23 17:44:18 +0000 UTC

一个 ListView 的不同布局

  • 772

你好。有一个聊天活动,其中包含ListView消息。对于ListViewitem'a,有两种样式:左侧的消息(来自对话者),右侧的消息(您的)。

有一段代码,在给定的 URI 处,从服务器接收 JSON,它被解析为消息,然后解析为ListView项目。

JSON 看起来像这样:author:"author",reciever:"reciever",time:"time",content:"content"

所以,我需要根据谁拥有消息,它在ListView. 那些。如果我们收到消息,则ListViewitem'a 的样式在左侧,如果我们发送消息,则在右侧。(与所有使者一样)。

private class ListViewLoaderTask extends AsyncTask<String, Void, SimpleAdapter> {

    JSONObject jObject;

    @Override
    protected SimpleAdapter doInBackground(String... strJson) {
        try {
            jObject = new JSONObject(strJson[0]);
            parse(jObject);
        } catch (Exception e) {
            Log.d("JSON Exception1", e.toString());
        }


        List<HashMap<String, Object>> messages = null;

        try {
            messages = parse(jObject);
        } catch (Exception e) {
            Log.d("Exception", e.toString());
        }

        String[] from = {"content", "time", "author"};
        int[] to = {R.id.contentMSG, R.id.timeMSG, R.id.usernameMSG};

        /*
            Вот здесь нужно исходя из того, кто автор сообщения,
            выбрать layout

         */
        SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), messages, R.layout.one_msg_item, from, to);
        adapter.notifyDataSetChanged();

        return adapter;
    }


}


public List<HashMap<String, Object>> parse(JSONObject jObject) {

    JSONArray jMessages = null;
    try {
        jMessages = jObject.getJSONArray("Messages");
    } catch (JSONException | NullPointerException e) {
        e.printStackTrace();
    }

    return getMessages(jMessages);
}

private List<HashMap<String, Object>> getMessages(JSONArray jMessages) {
    List<HashMap<String, Object>> messagesList = new ArrayList<HashMap<String, Object>>();
    HashMap<String, Object> message = null;

    for (int i = 0; i < jMessages.length(); i++) {
        try {
            message = getMessage((JSONObject) jMessages.get(i));
            messagesList.add(message);

        } catch (JSONException | NullPointerException e) {
            e.printStackTrace();
        }
    }
    return messagesList;
}


private HashMap<String, Object> getMessage(JSONObject jMessage) {
    HashMap<String, Object> message = new HashMap<String, Object>();
    String author = "";
    String client = "";
    String time = "";
    String content = "";
    try {
        author = jMessage.getString("author");
        client = jMessage.getString("client");
        time = jMessage.getString("time");
        content = jMessage.getString("content");

        message.put("author", author);
        message.put("client", client);
        message.put("time", time);
        message.put("content", content);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    return message;
}
android
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Serge Markov
    2020-10-23T18:09:54Z2020-10-23T18:09:54Z

    通常,您会制作一个提供所需视图的适配器,而不会忘记检查 ViewHolder,例如:http ://android.amberfog.com/?p=296

     @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder holder = null;
                int type = getItemViewType(position);
                System.out.println("getView " + position + " " + convertView + " type = " + type);
                if (convertView == null) {
                    holder = new ViewHolder();
                    switch (type) {
                        case TYPE_FROM:
                            convertView = mInflater.inflate(R.layout.item1, null);
                            holder.textView = (TextView)convertView.findViewById(R.id.text);
                            break;
                        case TYPE_TO:
                            convertView = mInflater.inflate(R.layout.item2, null);
                            holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);
                            break;
                    }
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder)convertView.getTag();
                }
                holder.textView.setText(mData.get(position));
                return convertView;
            }
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5