【问题标题】:Displaying two different data types from an object in a Listview在 Listview 中显示来自对象的两种不同数据类型
【发布时间】:2013-12-02 16:51:46
【问题描述】:

基本上,我希望使用值“test”和值“createdAt”填充 ListView。我已经想出了如何让任何一个出现在列表视图中,但不能同时出现。显然,我不明白这是如何在一个非常基本的层面上运作的。我不知道如何让两种不同的数据类型(字符串和日期)一起显示在同一个 ListView 元素中。我知道 SimpleAdapter 需要一个包含地图的列表,但是如果我只能在地图中存储一个键值对,我如何一次显示多个值?

        public void done(List<ParseObject> results, ParseException e) {
            if (e == null) {
                ArrayList<HashMap<String, Date>> messages= new ArrayList<HashMap<String, Date>>();
                for (ParseObject result : results) {
                    HashMap<String, Date> testMap = new HashMap<String,Date>();
                    HashMap<String, String> dateMap = new HashMap<String,String>();

                    testMap.put("test",(String)result.get("test"));

                    dateMap.put(createdAtKey,(Date)result.getCreatedAt());

                    messages.add(message);
                                            //What do I do with the "test"values?

                }
                SimpleAdapter adapter = new SimpleAdapter(FeedActivity.this, messages,android.R.layout.simple_list_item_2, new String[] {testKey,createdAtKey}, new int[] {android.R.id.text1, android.R.id.text2 });
                setListAdapter(adapter);
            } else {
                Log.e(TAG, "Exception caught!", e);
            }
        }
    });
}

【问题讨论】:

  • 你需要创建你自己的Adapter,继承BaseAdapter,然后你可以做任何你想做的事情。

标签: java android arraylist hashmap simpleadapter


【解决方案1】:

我假设您将正确的数据传递到您的适配器,但无法显示它。

首先 - 您需要创建一个 XML 文件,该文件将代表填充列表视图的布局。例如,假设 text1 和 text2 是应该显示结果的文本框的 ID,我会这样做:

<?xml version ="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    android:id="@+id/layoutContainer" >
    <TextView 
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:id="@+id/text1" />
</LinearLayout>

在你的activity中,使用String[]值来实现目标格式:

String[] values = new String[testMap.size];
for(int i=0;i<testMap.size;i++) {
    values[i] = "[" + testMap.get(yourKey) + "]-[" + dateMap.get(yourKey) + "]" //replace yourKey with the appropriate key string
CustomAdapter myAdapter = new CustomAdapter(getActivity(), values);

然后实现一个CustomAdapter类,像这样

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class CustomAdapter extends BaseAdapter {
    private String[] data;
    private Context context;

    public CustomAdapter(Context context, String[] values) {
        this.context = context;
        this.data = values;
    }
    @Override
    public int getCount() {
        return data.length;
    }
    @Override
    public String getItem(int position) {
        // TODO Auto-generated method stub
        return data[position];
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View adapterView = convertView;
        if (adapterView == null) {
            adapterView = inflater.inflate(R.layout.row, null);
        }
        TextView text1 = (TextView) adapterView.findViewById(R.id.text1);
        text1.setText(data[position]);
        return adapterView;
    }
}

【讨论】:

  • 谢谢。我绝对传递了正确的数据。我记录了所有内容(从粘贴中删除)并且数据在那里。我还可以正确显示日期(有效)和测试值(也有效),但不能同时显示两者。所以我会试一试,看看会发生什么。
  • 我应该创建一个像 myAdapter 这样的新类并扩展 SimpleAdapter 吗?
  • 是的,但是扩展 BaseAdapter 而不是 SimpleAdapter
  • 好吧,现在很困惑。那么,我是还在使用映射,还是只是将对象数据保存到数组中?哈希图不能仍然只取一种值吗?我应该以某种方式通过两张地图吗?
  • 在我提供的代码中,我假设 testKey[] 数组包含对应于 testMap 的数据,更准确地说是它的键值,getCreatedAt[] 数组包含对应于 dateMap 的数据,更准确地说它的关键价值。这是您在原始问题中想要的吗?
猜你喜欢
  • 2011-09-13
  • 2021-07-03
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
相关资源
最近更新 更多