我正在尝试使用数组适配器显示歌曲列表。但问题是我无法显示列表,只显示具有预设背景的空白屏幕。这是代码...所有你都是单独的类... Plz帮助我...
public class SongsAdapter extends ArrayAdapter<SongsList>{
private Context context;
TextView tvTitle;
TextView tvMovie;
TextView tvSinger;
String s;
public SongsAdapter(Context context, int resource,
int textViewResourceId, String title) {
super(context, resource, textViewResourceId);
this.context=context;
}
public View getView(int position, View convertView, ViewGroup parent) {
final int i=position;
List<SongsList> listSongs = new ArrayList<SongsList>();
String title = listSongs.get(i).gettitleName().toString();
String album = listSongs.get(i).getmovieName().toString();
String artist = listSongs.get(i).getsingerName().toString();
String imgal = listSongs.get(i).gettitleName().toString();
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
View v = inflater.inflate(R.layout.row, null);
tvTitle=(TextView)v.findViewById(R.id.text2);
tvMovie=(TextView)v.findViewById(R.id.text3);
tvSinger=(TextView)v.findViewById(R.id.text1);
tvTitle.setText(title);
tvMovie.setText(album);
tvSinger.setText(artist);
final ImageView im=(ImageView)v.findViewById(R.id.image);
s="http://www.gorinka.com/"+imgal;
String imgPath=s;
AsyncImageLoaderv asyncImageLoaderv=new AsyncImageLoaderv();
Bitmap cachedImage = asyncImageLoaderv.loadDrawable(imgPath, new AsyncImageLoaderv.ImageCallback() {
public void imageLoaded(Bitmap imageDrawable, String imageUrl) {
im.setImageBitmap(imageDrawable);
}
});
im.setImageBitmap(cachedImage);
return v;
}
public class imageloader implements Runnable{
private String ss;
private ImageView im;
public imageloader(String s, ImageView im) {
this.ss=s;
this.im=im;
Thread thread = new Thread(this);
thread.start();
}
public void run(){
try {
HttpGet httpRequest = null;
httpRequest = new HttpGet(ss);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream is = bufHttpEntity.getContent();
Bitmap bm = BitmapFactory.decodeStream(is);
Log.d("img","img");
is.close();
im.setImageBitmap(bm);
} catch (Exception t) {
Log.e("bitmap url", "Exception in updateStatus()", t);
}
}
}
}
public class SongsList {
private String titleName;
private String movieName;
private String singerName;
private String imagePath;
private String mediaPath;
// Constructor for the SongsList class
public SongsList(String titleName, String movieName, String singerName,String imagePath,String mediaPath ) {
super();
this.titleName = titleName;
this.movieName = movieName;
this.singerName = singerName;
this.imagePath = imagePath;
this.mediaPath = mediaPath;
}
public String gettitleName()
{
return titleName;
}
public void settitleName(String titleName) {
this.titleName = titleName;
}
public String getmovieName()
{
return movieName;
}
public void setmovieName(String movieName) {
this.movieName = movieName;
}
public String getsingerName()
{
return singerName;
}
public void setsingerName(String singerName) {
this.singerName = singerName;
}
public String getimagePath()
{
return imagePath;
}
public void setimagePath(String imagePath) {
this.imagePath = imagePath;
}
public String getmediaPath()
{
return mediaPath;
}
public void setmediaPath(String mediaPath) {
this.mediaPath = mediaPath;
}
}
public class MusicListActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.openadiuofile);
ListView list = (ListView)findViewById(R.id.list1);
SongsAdapter adapter = new SongsAdapter(this,R.layout.row, R.id.text2, null);
list.setAdapter(adapter);
}
}
答案 0 :(得分:0)
Arrayadapter需要一个项目列表才能正常工作。 目前,您在getView方法中创建一个空列表,然后尝试从中请求一个项目。你只能这样做而不会破坏你的程序,因为从不调用这个函数。
在显示ListView时,ListView将询问底层适配器适配器中有多少项。 ArrayListAdapter将返回定义此适配器的内部列表的大小。您没有在超级构造函数中为ArrayAdapter提供这样的列表,因此适配器以空列表开头,如果您不向其添加内容,则适配器将对ListActivity的整个运行时保持为空。
解决此问题的最简单方法是在创建适配器之前创建所有SongLists的列表(顺便说一句,这不是名称的最佳选择,因为对象不是列表),然后将它们添加到ArrayAdapter中通过适配器的构造函数中的super constructor。现在适配器可以正常工作并调用你的getView方法。