كيفية عرض قائمة الأغاني بشكل صحيح باستخدام ArrayAdapter؟

StackOverflow https://stackoverflow.com/questions/2672478

  •  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 الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top