Как правильно отобразить список песен с помощью ArrayAdapter?
-
28-09-2019 - |
Вопрос
Я пытаюсь отобразить список песен, используя адаптеры массива. Но проблема в том, что я не могу отображать список и только пустой экран с предустановленным фоном отображается. Вот код ... Все это отдельные занятия ... Пожалуйста, помогите мне ...
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);
}
}
Решение
ArrayAdapter нуждается в списке предметов для правильной работы. На данный момент вы создаете пустой список в вашем методе GetView, а затем пытаясь запросить из него элемент. Вы можете сделать это только без капризной программы, потому что эта функция никогда не вызывается.
На данный момент отображается список ListView, ListView будет задать в основе базового адаптера, сколько элементов находятся в адаптере. ArrayListAdapter вернет размер внутреннего списка, определяющий этот адаптер. Вы не поставляете такой список для вашего ArrayAdapter в суперконструкторе, что ваш адаптер начинается с пустого списка, и если вы не добавляете что-то к нему, ваш адаптер останется пустым для всего временной среды.
Самый простой способ решить это состоит в том, чтобы создать список всех сонвездистов (кстати, не лучший выбор имени, потому что техно-объект не является списком) для отображения перед созданием адаптера, а затем добавить их в свой arrayAdapter через Суперконструктор в конструкторе вашего адаптера. Теперь адаптер может работать должным образом и позвонить в ваш метод GetView.