2013-10-14 35 views
0

我是新的Android应用程序开发,我试图创建一个由TextView和ListView组成的ListFragment。我想尝试使用自定义类中的数据填充ListView,从而创建一个自定义ArrayAdapter。我的应用程序运行但没有显示列表中的任何内容,我无法弄清楚为什么不能。我已经记录了这些数据,并且它出现在持有者身上,并且文本似乎已经设置,但出了问题。通过自定义ArrayAdapter在ListFragment中填充列表 - 我的数据没有显示,但出现在适配器中

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中仍然没有显示任何内容。

回答

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; 
} 
+0

只需删除持有人基本上?不,它没有帮助。创建了5个空行,但没有文本。同样这次,如果我做station.getText()我可以得到我的数据。我需要在早些时候添加适配器吗? –

+0

使用myList.setAdapter(adapter); –

+0

我使用的是ListFragment,它明确地说使用setListViewAdapter(adapter)而不是myList.setAdapter。尽管如此,我仍尝试了两种方法,并且出现了很多错误 –

0

我发现这个问题。愚蠢由于某种原因,我有android:layout_width =“0dip”的textviews ........改为android:layout_width =“fill_parent”和繁荣,有我的数据!

相关问题