【问题标题】:Android listview item doesn't appearAndroid listview 项目不出现
【发布时间】:2009-10-20 13:38:50
【问题描述】:

我应该在标题中写下“不起作用”之类的“我” 不知道怎么做'但第一个版本感觉更好:)。 我想做的是以下几点:

  1. 从网上下载xml,解析并创建一些ArrayList 对象(完成和工作)
  2. 使用自定义适配器显示对象(不起作用)

如果我在将项目添加到 ArrayList 之前将其添加到,则第二个有效 视图使用

m_orderAdapter = new OrderAdapter(this,m_orders); //code for orderadapter
below
setListAdapter(m_orderAdapter);

我在网上找到了这样的东西:(在我的 onCreate 方法中)

handler = new Handler();
        viewOrders = new Runnable(){

            @Override
            public void run() {
                getOrders();

            }

        };
        new Thread(){
            @Override
            public void run(){
                handler.post(viewOrders);
            }
        }.start();

然后,方法的以下代码:

private void getOrders(){
      try{
          OrderManager om = new OrderManager();
           m_orders = om.getOrdersFromWeb();
           Log.i("ARRAY", ""+ m_orders.size());
      } catch (Exception e) {
          Log.e("BACKGROUND_PROC", e.getMessage());
      }
      runOnUiThread(returnRes);
    }

OrderManager 下载 xml 并将其解析为 Order 对象并返回 数组列表。然后我将此列表设置为我的成员数组列表 m_orders。 下载和解析完成后,我在 ui 线程上运行 returnRes 方法 使用runOnUiThread方法

private Runnable returnRes = new Runnable() {

        @Override
        public void run() {
            if(m_orders != null && m_orders.size() > 0){
                Log.i("ORDER",m_orders.get(0).getOrder_id());
                setListAdapter(m_orderAdapter);
                m_orderAdapter.notifyDataSetChanged();
            }
          m_orderAdapter.notifyDataSetChanged();
        }
      };

然后我在我的适配器上调用 notifyDataSetChanged()。

我做所有这些事情的视图扩展了 ListView 和适配器的代码 其本身如下所列:

public class OrderAdapter extends BaseAdapter{

    private Context ctx;
    private List<Order> orders;

    public OrderAdapter(Context ctx, List<Order> orderLst){
        this.ctx = ctx;
        this.orders = orderLst;
    }
    @Override
    public int getCount() {
        return orders.size();
    }

    @Override
    public Object getItem(int pos) {
        return orders.get(pos);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Order o = orders.get(position);
        return new OrderListAdapterView(this.ctx,o);
    }

}

当我调试时,我的 m_orders 列表中有数据,但是当我调用时 notifyDataSetChanged 没有任何反应,我读过我必须执行 在我认为我做的 UI 线程上。所以有什么问题 ? 任何帮助都非常感谢,或者可能只是一个不错的教程的链接 网络解释了如何在运行时更新列表视图?

【问题讨论】:

    标签: android listview


    【解决方案1】:

    嘿 Arutha - 你为什么不看到我的 answer for this post - 我认为这是你需要的。

    或者让我在这里重新发布它

    您可以扩展 ArrayAdapter。这是给你的代码示例。在此示例中 - SearchItem 是一些自定义 POJO。基本上你需要重写 getView() 方法来构建你的行,方法是膨胀行布局,然后根据项目列表和当前位置填充值

    class SearchItemsAdapter extends ArrayAdapter<SearchItem> {
    Activity context;
    List<SearchItem> items;
    SearchHeader header;
    
    @SuppressWarnings("unchecked")
    public SearchItemsAdapter(final Activity context,
            final Map<SearchHeader, List<SearchItem>> result) {
        super(context, R.layout.item, (List) ((Object[]) result.values()
                .toArray())[0]);
        this.context = context;
        this.header = result.keySet().iterator().next();
        this.items = result.get(this.header);
    }
    
    @Override
    public View getView(final int position, final View convertView,
            final ViewGroup parent) {
        final View view = this.context.getLayoutInflater().inflate(
                R.layout.item, null);
        final SearchItem item = this.items.get(position);
        ((TextView) view.findViewById(R.id.jt)).setText(item.jt);
        ((TextView) view.findViewById(R.id.dp)).setText(item.dp);
        ((TextView) view.findViewById(R.id.cn)).setText(item.cn);
        ((TextView) view.findViewById(R.id.loc)).setText(item.loc.name);
        final TextView body = ((TextView) view.findViewById(R.id.e));
        body.setText(item.e);
        body.setTag(item.src[0]);
        ((TextView) view.findViewById(R.id.src)).setText(item.src[1]);
        return view;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      相关资源
      最近更新 更多