使用自定义视图填充ListFragments?

bor*_*mke 6 android listview view android-fragments layout-inflater

以前,我将布局膨胀为ListView的自定义视图层次结构没有问题.但我不知道如何为listFragment做同样的事情.假设我有一个带有ImageView和2个textview的item_list布局.我想膨胀这个在我的ListFragment中使用.但是怎么样?

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;
    }
 }            
}
}
Run Code Online (Sandbox Code Playgroud)

B T*_*B T 1

我无法确定这是否是我遇到此问题时解决问题的方法,但我认为您没有正确遵循片段生命周期(参见此处)。

在谈论活动的上下文中,您必须先创建您的活动ListView,然后才能进行类似的调用setAdapter()。您正在实施其中onCreate()被调用的 before onCreateView()

因此,看起来您本质上是在ListView创建适配器之前尝试设置它。

作为一种习惯,最好在onCreateView()片段生命周期的一部分中使用视图完成所有工作。