0

私はAndroidアプリ開発の初心者で、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