2012-10-19 68 views
1

我是新來的android api,我有一些問題..基礎知識。 我試圖獲取列表的工作,但該列表顯示了錯誤的文字:ListFragment顯示錯誤的項目

每行有兩個TextViews(標題,副標題),繼承人的XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="5dip" > 

    <TextView 
     android:id="@+id/row_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TITLE" 
     android:textSize="15dip" 
     android:layout_gravity="center_vertical" /> 

    <TextView 
     android:id="@+id/row_subtitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/row_title" 
     android:text="SUBTITLE" 
     android:textSize="10dip" 
     android:layout_gravity="center_vertical" /> 

</RelativeLayout> 

我延長ListFragment(我需要這個片段的東西,因爲slidingMenu庫),有一個自定義適配器和一個項目類。 在onActivityCreated()方法,我想補充一些隨機的物品到適配器:

package com.slidingmenu.example; 

import android.app.Fragment; 
import android.app.ListFragment; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 


public class SampleListFragment extends ListFragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.list, null); 
    } 

    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     SampleAdapter adapter = new SampleAdapter(getActivity()); 
     for (int i = 0; i < 20; i++) { 
      adapter.add(new SampleItem(new Fragment(), "title no. " + i, "some subtitle")); 
     } 
     setListAdapter(adapter); 
    } 

    private class SampleItem { 
     public Fragment frag; 
     public String title; 
     public String subTitle; 
     public SampleItem(Fragment frag, String title, String subTitle) { 
      this.frag = frag; 
      this.title = title; 
      this.subTitle = subTitle; 
     } 
    } 

    public class SampleAdapter extends ArrayAdapter<SampleItem> { 

     public SampleAdapter(Context context) { 
      super(context, 0); 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null); 
      } 
      TextView title = (TextView) convertView.findViewById(R.id.row_title); 
      TextView subTitle = (TextView) convertView.findViewById(R.id.row_subtitle); 

      return convertView; 
     } 

    } 
} 

所以我thougt該列表會顯示這樣的事情:

title no. 0 
some subtitle 
- 
title no. 1 
some subtitle 
- 
title no. 2 
some subtitle 
- 

etc. 

而是它只是顯示我定義了什麼在row.xml:

TITLE 
SUBTITLE 
- 
TITLE 
SUBTITLE 
- 

etc. 

我認爲getView()需要改變(至少它不會作出太大的意義對我來說),但我不知道。 我所嘗試的一切都會導致一些空指針異常或更糟。

請問有人能告訴我我需要改變什麼嗎?

+0

好吧,你永遠不會調用textview.settext(sampleitem.title) –

回答

1

誤差爲int適配器:

public View getView(int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null); 
      } 
      TextView title = (TextView) convertView.findViewById(R.id.row_title); 
      TextView subTitle = (TextView) convertView.findViewById(R.id.row_subtitle); 

      return convertView; 
     } 

getView從來沒有填滿titlesubtitle。其次,您絕不會向superclass提交要在ListFragment中顯示的數據集。

在這裏你有辦法。或者你可以使用和getItemgetItemId方法,或使用this構造函數向數據集提供超類。仔細閱讀文檔。

+0

啊,我添加了title.setText(this.getItem(position).title); \t \t \t subTitle.setText(this.getItem(position).subTitle);現在它可以工作。我以爲我都已經嘗試過了。不管怎樣,謝謝你! – user1758910

+0

你解決了你的問題嗎? – Blackbelt