Android ListView ViewHolder仅显示一个视图

时间:2014-02-12 13:30:08

标签: android android-arrayadapter

我的观看者遇到了一个奇怪的问题。我正在尝试创建一个活动,允许用户从datepicker对话框中选择多个日期(这可以工作),然后列出所选日期并为每个日期添加时间戳。例如22-02-2014 14:00(14:00描绘该日期的时间戳)。因此,如果选择了5个日期,则会显示5行,每行包含一个选定的日期和自己的时间戳。

目前从所选日期创建列表有效,但无论我尝试什么,都不会出现timepicker。只有包含日期​​的文本视图才会显示在持有者中。

我一直在寻找几个小时的解决方案,但我似乎无法找到类似的问题,这表明我的结果是严重错误的。只是无法理解那可能是什么。

相关代码(省略活动本身,因为它与list和all一起工作):

import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.TimePicker;

public class RandomListAdapter extends ArrayAdapter<String> {
static Context mContext;
private static class ViewHolder {
    private View row;
    private TextView date;
    private TimePicker tp;      

    public ViewHolder(View row) {
        this.row = row;
    }
    public void setDate(String date) {
        this.date.setText(date);
    }
    public void initTp(TimePicker tp){
        this.tp = tp;
    }
    public void setHour(int h) {
        tp.setCurrentHour(h);
    }
    public void setMin(int m){
        tp.setCurrentMinute(m);
    }
    public TextView getDate() {
        if(date==null) {
            date = (TextView) row.findViewById(R.id.rr_date_item);
        }
        return date;
    }
    public TimePicker getTp() {
        if(tp==null) {
            tp = (TimePicker) row.findViewById(R.id.rr_tp);
        }
        return tp;
    }
}

private static RandomListAdapter instance = null;
private ArrayList<String> items;

public RandomListAdapter(Context context) {
    super(context, 0);
    mContext = context;
    items = new ArrayList<String>();
}

public void updateList(ArrayList<String> l){
    items = l;
    super.notifyDataSetChanged();
}

@Override
public int getCount() {
    return items.size();
}

@Override
public String getItem(int position) {
    return items.get(position);
}

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

@Override
public int getViewTypeCount() {
    return 1;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    String s = (String)items.get(position);
    ViewHolder vH = null;
    if(convertView == null){
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
        convertView = inflater.inflate(R.layout.rr_row_layout, null);
        vH = new ViewHolder(convertView);
        vH.date = vH.getDate();
        vH.tp = vH.getTp();

        convertView.setTag(vH);
    }
    else {
        vH = (ViewHolder) convertView.getTag();
    }       
    if(vH != null && s != null) {
        vH.setDate(s);
    }
    return convertView;
}

public static RandomListAdapter getInstance(Context mContext) {
    if(instance == null) {
        instance = new RandomListAdapter(mContext);
    }
    return instance;
}

}

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
android:showDividers="middle"
android:divider="?android:attr/dividerHorizontal" >


        <TextView
            android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
            android:id="@+id/rr_date_item"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:gravity="center_vertical|left"
            android:ellipsize="end"
            android:singleLine="true"
            android:layout_weight="0"
            android:textAlignment="gravity"
            android:textSize="18sp" /> 

        <TimePicker
            android:id="@+id/rr_tp"
            android:layout_width="0dip"
            android:layout_height="0dip"
            android:layout_weight="1" />

</LinearLayout>    

如果我遗漏了一些明显的东西,请提前致谢并道歉。

1 个答案:

答案 0 :(得分:0)

这可能是个问题

android:layout_height="0dip"

TimePicker上。将height更改为wrap_content。使用width时,只有0dp需要weight