2012-01-29 136 views
6

以前,我沒有將佈局膨脹爲ListView的自定義視圖層次結構的問題。但我不知道如何爲listFragment做同樣的事情。比方說,我有一個item_list佈局,裏面有一個ImageView和2個textview。我想膨脹這在我的ListFragment中使用。但是怎麼樣?使用自定義視圖填充ListFragments?

public class Tab1Fragment extends ListFragment { 
private LayoutInflater mInflater; 
private Vector<RowData> data; 
RowData rd; 

static final String[] title = new String[] { 
    "Classic Plank", "Side Plank", "Reversed Plank", "Swissball Plank", "One Arm One Leg", //5 
    }; 

static final String[] description = new String[] { 
    "Variation of Sushis from fresh vegetables and seafoods! Good for family occassions!", 
    "Oyakodon is a Japanese Rice Bowl dish with Chicken, Eggs and various sorts of healthy and delicious Veggetables!", 
    "Japanese assorted Pancake that is made from many different ingredients. The taste is so delicious!", 
    "Japanese Dumplings made of Rice Flour. This is one of the healthiest sweets in Japan!", 
    "Japanese assorted stews. Made from many different kind of veggetables. Popular in Winter!", //5 
    }; 

private Integer[] imgid = { 
R.drawable.thumb_classic, R.drawable.thumb_side, R.drawable.thumb_reverse,  R.drawable.thumb_swissball, R.drawable.thumb_reachout, //5 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.easylist); 
mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
data = new Vector<RowData>(); 
for(int i=0;i<title.length;i++){ 
    try { 
     rd = new RowData(i,title[i],description[i]); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
      } 
    data.add(rd); 
    } 
CustomAdapter adapter = new CustomAdapter(this, R.layout.list_item_main, android.R.id.list, data); 
    setListAdapter(adapter); 
    getListView().setTextFilterEnabled(true); 
} 


private void setContentView(int main) { 
// TODO Auto-generated method stub 

} 


private LayoutInflater getSystemService(String layoutInflaterService) { 
// TODO Auto-generated method stub 
return null; 
} 


public void onListItemClick(ListView listView, View view, int position, long id) { 
Bundle bundle = new Bundle(); 
bundle.putInt("Layout", position); 

Intent newIntent = new Intent(this.getApplicationContext(), ContentViewer.class); 
newIntent.putExtras(bundle); 
startActivityForResult(newIntent, 0); 
} 
    private Context getApplicationContext() { 
// TODO Auto-generated method stub 
return null; 
} 
private class RowData { 
    protected int mId; 
    protected String mTitle; 
    protected String mDescription; 
    RowData(int id, String title, String description){ 
    mId=id; 
    mTitle = title; 
    mDescription = description; 
} 
    @Override 
    public String toString() { 
      return mId+" "+mTitle+" "+mDescription; 
    } 
} 
    private class CustomAdapter extends ArrayAdapter<RowData> { 

    public CustomAdapter(Context context, int resource, int textViewResourceId, List<RowData> objects) {    

super(context, resource, textViewResourceId, objects); 
} 
@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder = null; 
    TextView title = null; 
    TextView description = null; 
    ImageView thumbnail = null; 
    RowData rowData = getItem(position); 
    if(null == convertView){ 
     convertView = mInflater.inflate(R.layout.list_item_main, null); 
     holder = new ViewHolder(convertView); 
     convertView.setTag(holder); 
} 
     holder = (ViewHolder) convertView.getTag(); 
     title = holder.gettitle(); 
     title.setText(rowData.mTitle); 

     description = holder.getdescription(); 
     description.setText(rowData.mDescription); 

     thumbnail = holder.getImage(); 
     thumbnail.setImageResource(imgid[rowData.mId]); 
     return convertView; 
} 
     private class ViewHolder { 
     private View mRow; 
     private TextView title = null; 
     private TextView description = null; 
     private ImageView thumbnail = null; 

     public ViewHolder(View row) { 
     mRow = row; 
} 
    public TextView gettitle() { 
     if(null == title){ 
      title = (TextView) mRow.findViewById(R.id.title); 
      } 
     return title; 
    }  

    public TextView getdescription() { 
     if(null == description){ 
       description = (TextView) mRow.findViewById(R.id.description); 
       } 
     return description; 
    } 

    public ImageView getImage() { 
     if(null == thumbnail){ 
       thumbnail = (ImageView) mRow.findViewById(R.id.thumbnail); 
            } 
      return thumbnail; 
    } 
}    
} 
} 
+0

完全一樣,使用適配器和ListView一樣,並擴展自己的佈局。 – 2012-01-29 14:33:47

+0

@DavidCaunt在適配器上出現錯誤。我從我的應用程序中移植了一個listview表單,並將「extends ListActivity」改爲「extends ListFragment」。它說適配器是未定義的。幫幫我??? 繼承人的代碼http://dl.dropbox.com/u/33331786/Errors/listfragment.txt – borislemke 2012-01-29 14:38:58

+0

在這一行: CustomAdapter adapter = new CustomAdapter(this,R.layout.list_item_main,android.R.id.list ,數據); \t setListAdapter(adapter); \t getListView()。setTextFilterEnabled(true); \t} – borislemke 2012-01-29 14:39:51

回答

1

我不記得肯定,如果這是當我有什麼就解決了這個問題,但我不認爲你是以下片段生命週期(看到here)正確。

在談論某項活動時,您必須首先創建您的ListView,然後再撥打電話setAdapter()。您正在執行onCreate(),這是在onCreateView()之前調用的。

所以它看起來好像你在本質上試圖在你創建它之前設置你的ListView的適配器。

作爲一種習慣,最好始終在片段生命週期的onCreateView()部分內完成所有工作。

相關問題