【问题标题】:How to check values in HashMap<String, String> and setBackgroundResource when record = value?当记录 = 值时,如何检查 HashMap<String, String> 和 setBackgroundResource 中的值?
【发布时间】:2016-05-25 22:22:37
【问题描述】:

我刚刚开始使用 Android Studio 2.1 编写一个 Android 应用程序,我的应用程序有点像离线消息传递 - 这是使用 SQLite 数据库(基本上由两个表消息和联系人组成)。

我现在正在进行最后一项活动,我需要从创建的联系人中填充消息交换列表。我能够列出它们,但没有美学。每当类型是 LEFT 或 RIGHT 但难以应用它时,我想设置不同的 setBackgroundResource 。 以下是我的代码:

MessageRepo - SQLite DBhelper:

    public ArrayList<HashMap<String, String>> getMessageListById(int fromid, int toid) {
    SQLiteDatabase db = helper.getWritableDatabase();
    String toquery = "SELECT " + MessageModel.messageId +
            ", " + MessageModel.fromId +
            ", " + MessageModel.toId +
            ", " + MessageModel.messageContent +
            ", 'RIGHT' AS type FROM " + MessageModel.tableMessage +
            " WHERE " + MessageModel.toId +
            " = ? AND " + MessageModel.fromId +
            " = ? ";
    String fromquery = "SELECT " + MessageModel.messageId +
            ", " + MessageModel.fromId +
            ", " + MessageModel.toId +
            ", " + MessageModel.messageContent +
            ", 'LEFT' AS type FROM " + MessageModel.tableMessage +
            " WHERE " + MessageModel.fromId +
            " = ? AND " + MessageModel.toId +
            " = ? ";
    String query = toquery +
            " UNION " + fromquery +
            " ORDER BY " + MessageModel.messageId;

    ArrayList<HashMap<String, String>> messageList = new ArrayList<HashMap<String, String>>();

    Cursor cursor = db.rawQuery(query, new String[]{String.valueOf(fromid), String.valueOf(toid), String.valueOf(fromid), String.valueOf(toid)});
    if (cursor.moveToFirst()) {
        do {
            HashMap<String, String> messages = new HashMap<String, String>();
            messages.put("messageId", cursor.getString(0));
            messages.put("messageFromId", cursor.getString(1));
            messages.put("messageToId", cursor.getString(2));
            messages.put("messageContent", cursor.getString(3));
            messages.put("type", cursor.getString(4));
            messageList.add(messages);
        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return messageList;
}

消息活动 - 这将显示在 ListView 中,但无法正常工作:

        ArrayList<HashMap<String, String>> messageList = messagehandler.getMessageListById(_fromid, _toid);
    if (messageList.size() != 0) {
        ListView listView = getListView();
        if(messageList.contains("RIGHT")) {
            listView.setBackgroundResource(R.drawable.right);
        } else {
            listView.setBackgroundResource(R.drawable.left);
        }

        ListAdapter adapter = new SimpleAdapter(MessageDetailActivity.this, messageList, R.layout.message, new String[]{"messageFromId", "messageToId", "messageContent"}, new int[]{R.id.FromId, R.id.ToId, R.id.message});
        setListAdapter(adapter);
        }

我检查了很多帖子,但似乎无法让它对我有用: The constructor ArrayAdapter>>(Context, int, ArrayList>) is undefined Android Alternate row Colors in ListView

提前非常感谢!

【问题讨论】:

    标签: android listview arraylist hashmap android-studio-2.1


    【解决方案1】:

    经过更多研究。我终于通过选择使用 List 和 setter/getter 类找到了答案:

    public class MessagesAdapter extends ArrayAdapter<ContactsAndMessages> {
    
    public MessagesAdapter(Context context, List<ContactsAndMessages> contacts) {
        super(context, 0, contacts);
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ContactsAndMessages contact = getItem(position);
    
        Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/helvetica.ttf");
    
        if(convertView == null) {
            if (contact.type.equalsIgnoreCase("me")) {....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-30
      • 2013-10-05
      • 2014-01-02
      • 2012-07-13
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多