0

我是 android app dev 的新手,我正在尝试创建一个由 TextView 和 ListView 组成的 ListFragment。我想尝试使用来自自定义类的数据填充 ListView,从而创建了一个自定义 ArrayAdapter。我的应用程序运行但未在列表中显示任何内容,我不知道为什么不。我已经记录了数据并且它存在于持有人中,并且文本似乎已设置但有问题。

row_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip" >

 <LinearLayout
    android:orientation="vertical"

    android:layout_width="0dip"
    android:layout_weight="1"
    android:layout_height="fill_parent">

    <TextView
        android:id="@+id/TextViewStation"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"

        android:gravity="center_vertical"
        android:text="My Application" />

    <TextView
        android:id="@+id/TextViewType"  
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1" 

        android:singleLine="true"
        android:ellipsize="marquee"
        android:text="Simple application that shows how to use RelativeLayout" />

</LinearLayout>

</RelativeLayout>

list_layout.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="fill_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/android:empty"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="No items to display." />

<ListView
    android:id="@+id/android:list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

SimpleArrayAdapter.java

 public class SimpleArrayAdapter extends ArrayAdapter<Warning> {
private final Context context;
private final List<Warning> objects;

public SimpleArrayAdapter(Context context, int resource,
        List<Warning> objects) {
    super(context, resource);
    this.context = context;
    this.objects = objects;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ViewHolder holder = new ViewHolder();

    if (row == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.row_layout, parent, false);
        holder.v1 = (TextView) row.findViewById(R.id.TextViewStation);
        holder.v2 = (TextView) row.findViewById(R.id.TextViewType);
        row.setTag(holder);
    } else {
        holder = (ViewHolder) row.getTag();
    }
    final Warning warning = objects.get(position);
    if (warning != null) {
        holder.v1.setText(warning.getStation());
        holder.v2.setText(warning.getType());
        // Log.d("Adapter", "holder.v1.getText(): " + holder.v1.getText());
    }
    return row;
}

public static class ViewHolder {
    TextView v1; // view1
    TextView v2; // view2
}

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

@Override
public Warning getItem(int position) {
    // TODO Auto-generated method stub
    return objects.get(position);
}
}

List_View.java - ListFragment

    public class List_View extends ListFragment {
List<Warning> items = new ArrayList<Warning>();

    Gson gson = new Gson();
private SimpleArrayAdapter adapter;
private ListView mListView;

// @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // ---- Get data!
    JsonElement je = new JsonParser().parse(result);
    JsonObject jo = je.getAsJsonObject();
    JsonArray ja = jo.getAsJsonArray("warnings");

    for (int i = 0; i < ja.size(); i++) {
        Warning war = new Warning();
        war = gson.fromJson(ja.get(i).getAsJsonObject(), Warning.class);
        items.add(war);
    }
    // ----
}

// @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater
            .inflate(R.layout.list_layout, container, false);
    // RESTManager manager = new RESTManager();
    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Log.d("Adapter", "items.size(): "+ items.size());
    adapter = new SimpleArrayAdapter(getActivity(), R.layout.row_layout,
            items);
    setListAdapter(adapter);
}
}

在 SimpleArrayAdapter 中,我从 holder.v1.getText() 记录结果返回正确的值,但应用程序的 ListView 中仍然没有显示任何内容。

4

2 回答 2

0

尝试这个 :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;


   TextView station, type ;

   if (row == null) {
       LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       row = inflater.inflate(R.layout.row_layout, parent, false);
       station = (TextView) row.findViewById(R.id.TextViewStation);
       type  = (TextView) row.findViewById(R.id.TextViewType);

   }

   Warning warning = objects.get(position);
   if (warning != null) {
       station.setText(warning.getStation());
       type.setText(warning.getType());
       // Log.d("Adapter", "holder.v1.getText(): " + holder.v1.getText());
   }
   return row;
}
于 2013-10-14T16:34:40.813 回答
0

我发现了问题。出于某种原因,我愚蠢地为 textviews 设置了 android:layout_width="0dip" .... 更改为 android:layout_width="fill_parent" 并且繁荣,这是我的数据!

于 2013-10-15T09:05:08.470 回答