2013-04-02 56 views
0

我已在列表視圖定義,並在佈局xml文件列表視圖的ID正確鏈接。仍然我收到上述錯誤。運行代碼時找不到ListView。說ListActivity必須有一個ListView屬性與ID android.R.id.list

我研究過在此發佈的類似的問題,但無濟於事。

請幫忙。

public class ImageList extends ListActivity { 

final static String imageUrls[] = { //some urls 

     }; 

private List<Photo> model = new ArrayList<Photo>(); 
PhotoAdapter adapter = null; 
ListView list = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.imagelist); 

    list = (ListView) findViewById(R.id.lvImageList); 
    // ArrayList<Bitmap> images = new ArrayList<Bitmap>(); 

    adapter = new PhotoAdapter(this, android.R.layout.simple_list_item_1, 
      model); 

    list.setAdapter(adapter); 
    ProduceImageList(imageUrls); 

} 

public void ProduceImageList(String[] imageUrls) { 
    int size = imageUrls.length; 
    ImageView imagePlace = null; 
    for (int i = 0; i < 4; i++) { 
     imagePlace = (ImageView) getListView().getChildAt(i); 
     downloadImage task = new downloadImage(imagePlace); 
     task.execute(imageUrls[i]); 
    } 
} 
//asynchronous downloading of images 
public class downloadImage extends AsyncTask<String, Void, Bitmap> { 
    // private String url; 
    Photo p = new Photo(); 
    private final WeakReference<ImageView> imageViewReference; 

    public downloadImage(ImageView imageView) { 
     imageViewReference = new WeakReference<ImageView>(imageView); 
    } 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     String localUrl = params[0]; 
     //here a bitmap download method is used which works fine separately 
        return BitmapDownload.DownloadBitmap(localUrl); 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     // TODO Auto-generated method stub 
     if (isCancelled()) 
      result = null; 
     if (imageViewReference != null) { 
      ImageView imageView = imageViewReference.get(); 
      if (imageView != null) { 
       p.setPhotoPic(result); 
       adapter.add(p); 
      } 
     } 

     super.onPostExecute(result); 
    } 

} 
    //class defined with getter and setter method 
public class Photo { 
    private Bitmap pic = null; 

    public Bitmap getPhotoPic() { 
     return pic; 
    } 

    public void setPhotoPic(Bitmap incomingPic) { 
     this.pic = incomingPic; 
    } 
} 

//custom ArrayAdapter to hold images 
class PhotoAdapter extends ArrayAdapter<Photo> { 

    public PhotoAdapter(Context context, int textViewResourceId, 
      List<Photo> objects) { 
     super(context, textViewResourceId, objects); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View row = convertView; 
     PhotoHolder holder = null; 
     if (row == null) { 
      LayoutInflater inflater = getLayoutInflater(); 
      row = inflater.inflate(R.layout.imagelistrow, parent,false); 
      holder = new PhotoHolder(row); 
      row.setTag(holder); 
     } else 
      holder = (PhotoHolder) row.getTag(); 
     holder.populateFrom(model.get(position)); 
     return (row); 
    } 

} 

//holder for the row view 
static class PhotoHolder { 
    private ImageView imagePlace = null; 
    private View row = null; 

    PhotoHolder(View row) { 
     this.row = row; 

     imagePlace = (ImageView) row.findViewById(R.id.ivImageList); 
    } 

    void populateFrom(Photo p) { 

     imagePlace.setImageBitmap(p.getPhotoPic()); 
    } 
} 

}

我的看法是......

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="schemas.android.com/apk/res/android"; android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> 
     <ListView android:id="@+id/lvImageList" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
    </LinearLayout> 
+0

您可以將XML用於' R.id.lvImageList' –

回答

3

不能同時使用自定義的ListView ID和ListActivityListActivity,每個錯誤,需要一個特定的ID你的ListView。目前,您正在使用自定義ID爲lvImageList。要麼改變你的活動使用Activity,而不是ListActivity或更新ListView的XML使用方法:

<ListView 
    android:id="@android:id/android:list" 
    ... /> 
+0

將ListView的ID更改爲'android:id =「@ + id/android:list」'也可以 –

0

有沒有必要在XML文件來定義自定義列表視圖ID。您只需使用android listview id,並且不需要在ListActivity中查找id,您只需調用getListView()即可獲得在佈局文件中定義的listview,其默認安卓編號爲

相關問題