在SimpleAdapter Android的多个对象 [英] Android Multiple objects in SimpleAdapter

查看:139
本文介绍了在SimpleAdapter Android的多个对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有过多个对象的自定义列表适配器的需要(除非你能想到更好的办法)。我知道,我在这里找错了树,将AP preciate有人设置我在正确的道路!

感谢

  playlistadapter =新MyPlaylistAdapter(MyApplication.getAppContext()
                                        songsList,
                                        retained_songsList,
                                        folderMode,
                                        R.layout.file_view,
                                        新的String [] {SONGTITLE,songAlbum,songPath},
                                        新的INT [] {R.id.checkTextView,R.id.text2,R.id.text3});

和我的适配器类:

 公共类MyPlaylistAdapter扩展SimpleAdapter {
        私人的ArrayList<宋> songsList =新的ArrayList<宋>();
        私人的ArrayList<宋> retained_songsList =新的ArrayList<宋>();
        私人的ArrayList<宋> playlistcheck =新的ArrayList<宋>();
        私人字符串folderMode;
        私人字符串标记=AndroidMediaCenter;
          公共MyPlaylistAdapter(上下文的背景下,列表与LT;宋> SongsList,列表与LT;宋> Retained_songsList,字符串FolderMode,INT资源的String []从,INT []到){
            超(背景下,空,资源,从,到);            songsList.clear();
            songsList.addAll(SongsList);            Log.i(TAGMyPlayListAdapter Songslist =+ songsList.size());
            retained_songsList.clear();
            retained_songsList.addAll(Retained_songsList);
            folderMode = FolderMode;        }
        公共查看getView(INT位置,查看convertView,父母的ViewGroup){
              // PlayListViewHolder持有人;
              CheckedTextView checkTextView;
              TextView的文本2;
              TextView的文字3;
              如果(convertView == NULL){              。LayoutInflater吹气=(LayoutInflater)MyApplication.getAppContext()getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              // LayoutInflater吹气= getLayoutInflater();
              convertView = inflater.inflate(R.layout.file_view,父母,假);
              //convertView.setBackgroundColor(0xFF00FF00);
              //持有人=新PlayListViewHolder();
              checkTextView =(CheckedTextView)convertView.findViewById(R.id.checkTextView);
              文本2 =(TextView中)convertView.findViewById(R.id.text2);
              文字3 =(TextView中)convertView.findViewById(R.id.text3);
              //convertView.setTag(holder);
              }其他{
                  //支架=(PlayListViewHolder)convertView.getTag();
              }
              //东西放在textviews
              字符串跟踪= NULL;
              字符串tracks_Details = NULL;
              字符串trackspath = NULL;              轨道= songsList.get(位置).getSongTitle();
              tracks_Details = songsList.get(位置).getAlbum()+(+ songsList.get(位置).getArtist()+);
              trackspath = songsList.get(位置).getSongPath();              checkTextView =(CheckedTextView)convertView.findViewById(R.id.checkTextView);
              文本2 =(TextView中)convertView.findViewById(R.id.text2);
              文字3 =(TextView中)convertView.findViewById(R.id.text3);
              checkTextView.setText(轨道);             如果(folderMode.equals(播放列表)){
                 checkTextView.setBackgroundColor(Color.GREEN);
                 checkTextView.setChecked(假);             尝试{
                 INT listsize_rs = retained_songsList.size();                     对于(INT J = 0; J< listsize_rs; J ++){
                         如果((retained_songsList.get(J).getSongPath())。等于(songsList.get(位置).getSongPath())){
                            checkTextView.setBackgroundColor(Color.TRANSPARENT);
                             //这里需要检查是否checkedtextview勾选与否
                            checkTextView.setChecked(真);
                            playlistcheck.add(songsList.get(位置));
                            打破;
                        }                     }
                  }赶上(例外五){
                 e.printStackTrace();
             }             }其他
             {
                 //这里需要检查是否checkedtextview勾选与否                 尝试{
                     如果(songsList.get(位置).getSongCheckedStatus()==真){                         checkTextView.setChecked(真);
                         }其他{
                         checkTextView.setChecked(假);
                         }                 }赶上(例外五){
                     e.printStackTrace();
                 }
             }
             text2.setText(tracks_Details);
             text3.setText(trackspath);
             Log.i(TAGMyPlayListAdapter Songslist =+ songsList.size());             返回convertView;
             }      }

不过,这并没有膨胀,引发以下错误:

  10-26 23:11:09.464:E / AndroidRuntime(2826):致命异常:主要
10-26 23:11:09.464:E / AndroidRuntime(2826):了java.lang.RuntimeException:错误接收广播意图在com.Nmidia.AMC.MusicActivity {行为= android.intent.action.GetMusicComplete FLG = 0×10} $ @ 18个414c5770
10-26 23:11:09.464:E / AndroidRuntime(2826):在android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:765)
10-26 23:11:09.464:E / AndroidRuntime(2826):在android.os.Handler.handleCallback(Handler.java:615)
10-26 23:11:09.464:E / AndroidRuntime(2826):在android.os.Handler.dispatchMessage(Handler.java:92)
10-26 23:11:09.464:E / AndroidRuntime(2826):在android.os.Looper.loop(Looper.java:137)
10-26 23:11:09.464:E / AndroidRuntime(2826):在android.app.ActivityThread.main(ActivityThread.java:4745)
10-26 23:11:09.464:E / AndroidRuntime(2826):在java.lang.reflect.Method.invokeNative(本机方法)
10-26 23:11:09.464:E / AndroidRuntime(2826):在java.lang.reflect.Method.invoke(Method.java:511)
10-26 23:11:09.464:E / AndroidRuntime(2826):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
10-26 23:11:09.464:E / AndroidRuntime(2826):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-26 23:11:09.464:E / AndroidRuntime(2826):在dalvik.system.NativeStart.main(本机方法)
10-26 23:11:09.464:E / AndroidRuntime(2826):因:显示java.lang.NullPointerException
10-26 23:11:09.464:E / AndroidRuntime(2826):在android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)
10-26 23:11:09.464:E / AndroidRuntime(2826):在android.widget.ListView.setAdapter(ListView.java:460)
10-26 23:11:09.464:E / AndroidRuntime(2826):在com.Nmidia.AMC.MusicActivity.setFilterMusic(MusicActivity.java:1230)
10-26 23:11:09.464:E / AndroidRuntime(2826):在com.Nmidia.AMC.MusicActivity $ 18.onReceive(MusicActivity.java:996)
10-26 23:11:09.464:E / AndroidRuntime(2826):在android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:755)
10-26 23:11:09.464:E / AndroidRuntime(2826):... 9点多


解决方案

1)第一行说,你需要通过物体插入适配器。您code说,你这样做。所以,你的隐含的问题是不明确的。

2)它不工作,因为你在构造函数中传递的是null(而不是一个列表)。

 超(背景下,空,资源,从,到);

这是什么预期: 超(上下文,列表<地图<字符串,>>中整型,字符串[],INT [])

3)您在适配器的构造函数传递空导致了简单的适配器为空的内部列表。这被空意味着SimpleAdapter.getCount()有没有对象(名单)来获得的数量。

I have a need (unless you can think of a better way) of passing multiple objects to a custom list adapter. I know that I'm barking up the wrong tree here, and would appreciate someone setting me on the right course!

Thanks

playlistadapter = new MyPlaylistAdapter(MyApplication.getAppContext(),
                                        songsList,
                                        retained_songsList,
                                        folderMode,
                                        R.layout.file_view, 
                                        new String[] { "songTitle","songAlbum", "songPath" }, 
                                        new int[] { R.id.checkTextView, R.id.text2, R.id.text3 });

And my adapter class:

public class MyPlaylistAdapter extends SimpleAdapter{
        private ArrayList <Song> songsList = new ArrayList<Song>();
        private ArrayList <Song> retained_songsList = new ArrayList<Song>();
        private ArrayList<Song> playlistcheck = new ArrayList<Song>();
        private String folderMode;
        private String TAG = "AndroidMediaCenter";
          public MyPlaylistAdapter(Context context,List<Song> SongsList, List<Song> Retained_songsList, String FolderMode,int resource, String[] from, int[] to) {
            super(context, null, resource, from, to);

            songsList.clear();
            songsList.addAll(SongsList);

            Log.i(TAG, "MyPlayListAdapter Songslist = " + songsList.size());
            retained_songsList.clear();
            retained_songsList.addAll(Retained_songsList);
            folderMode = FolderMode;

        }
        public View getView(int position, View convertView, ViewGroup parent) {
              //PlayListViewHolder holder;
              CheckedTextView checkTextView; 
              TextView text2; 
              TextView text3;
              if (convertView == null) {

              LayoutInflater inflater = (LayoutInflater) MyApplication.getAppContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              //LayoutInflater inflater=getLayoutInflater();
              convertView=inflater.inflate(R.layout.file_view, parent, false);
              //convertView.setBackgroundColor(0xFF00FF00 );
              //holder = new PlayListViewHolder();
              checkTextView = (CheckedTextView) convertView.findViewById(R.id.checkTextView);
              text2 = (TextView) convertView.findViewById(R.id.text2);
              text3 = (TextView) convertView.findViewById(R.id.text3);
              //convertView.setTag(holder);
              } else {
                  //holder = (PlayListViewHolder) convertView.getTag();
              }
              //put something into textviews
              String tracks = null;
              String tracks_Details = null;
              String trackspath = null;

              tracks = songsList.get(position).getSongTitle();
              tracks_Details = songsList.get(position).getAlbum() + " (" + songsList.get(position).getArtist() + ")";
              trackspath = songsList.get(position).getSongPath();                  

              checkTextView = (CheckedTextView) convertView.findViewById(R.id.checkTextView);
              text2 = (TextView) convertView.findViewById(R.id.text2);
              text3 = (TextView) convertView.findViewById(R.id.text3);


              checkTextView.setText(tracks);



             if(folderMode.equals("Playlists")){
                 checkTextView.setBackgroundColor(Color.GREEN); 
                 checkTextView.setChecked(false);

             try {


                 int listsize_rs = retained_songsList.size();

                     for (int j = 0; j<listsize_rs;j++){
                         if((retained_songsList.get(j).getSongPath()).equals(songsList.get(position).getSongPath())){
                            checkTextView.setBackgroundColor(Color.TRANSPARENT);
                             //Need to check here whether the checkedtextview is ticked or not
                            checkTextView.setChecked(true);
                            playlistcheck.add(songsList.get(position));
                            break;
                        }

                     }
                  } catch (Exception e) {
                 e.printStackTrace();
             }

             }else
             {
                 //Need to check here whether the checkedtextview is ticked or not

                 try {
                     if (songsList.get(position).getSongCheckedStatus()==true){

                         checkTextView.setChecked(true);
                         }else{
                         checkTextView.setChecked(false); 
                         }

                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             }


             text2.setText(tracks_Details);
             text3.setText(trackspath);


             Log.i(TAG, "MyPlayListAdapter Songslist = " + songsList.size());

             return convertView;
             }



      }

However, this doesn't inflate, throwing the following errors:

10-26 23:11:09.464: E/AndroidRuntime(2826): FATAL EXCEPTION: main
10-26 23:11:09.464: E/AndroidRuntime(2826): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.GetMusicComplete flg=0x10 } in com.Nmidia.AMC.MusicActivity$18@414c5770
10-26 23:11:09.464: E/AndroidRuntime(2826):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:765)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at android.os.Handler.handleCallback(Handler.java:615)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at android.os.Looper.loop(Looper.java:137)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at java.lang.reflect.Method.invokeNative(Native Method)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at java.lang.reflect.Method.invoke(Method.java:511)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at dalvik.system.NativeStart.main(Native Method)
10-26 23:11:09.464: E/AndroidRuntime(2826): Caused by: java.lang.NullPointerException
10-26 23:11:09.464: E/AndroidRuntime(2826):     at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at android.widget.ListView.setAdapter(ListView.java:460)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at com.Nmidia.AMC.MusicActivity.setFilterMusic(MusicActivity.java:1230)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at com.Nmidia.AMC.MusicActivity$18.onReceive(MusicActivity.java:996)
10-26 23:11:09.464: E/AndroidRuntime(2826):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:755)
10-26 23:11:09.464: E/AndroidRuntime(2826):     ... 9 more

解决方案

1) The first line says that you needs to pass object into the adapter. Your code says that you are doing so. So your implied question is ambiguous.

2) It's not working because you passed null (instead of a list) in the constructor.

super(context, null, resource, from, to);

This is what is expected: super(Context, List<Map<String, ?>>, int, String[], int[])

3) The null that you passed in your adapter's constructor causes the internal List for simple adapter to be null. It being null means that SimpleAdapter.getCount() has no object (list) to get the quantity of.

这篇关于在SimpleAdapter Android的多个对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆