SimpleAdapter中的Android多对象
我需要(除非您能想出更好的方法)将多个对象传递给自定义列表适配器。我知道我找错了方向,如果有人能让我走上正确的道路,我将不胜感激 谢谢SimpleAdapter中的Android多对象,android,listview,simpleadapter,Android,Listview,Simpleadapter,我需要(除非您能想出更好的方法)将多个对象传递给自定义列表适配器。我知道我找错了方向,如果有人能让我走上正确的道路,我将不胜感激 谢谢 playlistadapter = new MyPlaylistAdapter(MyApplication.getAppContext(), songsList, retained_songsList,
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 });
和我的适配器类:
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;
}
}
1) 第一行表示需要将对象传递到适配器中。您的代码表明您正在这样做。所以你的隐含问题是模棱两可的
2) 它不起作用,因为您在构造函数中传递了null(而不是列表)
super(context, null, resource, from, to);
这就是我们所期望的:
3) 在适配器的构造函数中传递的null会导致简单适配器的内部列表为null。它为null表示SimpleAdapter.getCount()没有对象(列表)来获取其数量。1)第一行表示需要将对象传递到适配器中。您的代码表明您正在这样做。所以你的隐含问题是模棱两可的
2) 它不起作用,因为您在构造函数中传递了null(而不是列表)
super(context, null, resource, from, to);
这就是我们所期望的:
3) 在适配器的构造函数中传递的null会导致简单适配器的内部列表为null。它为null表示SimpleAdapter.getCount()没有对象(列表)可获取的数量。AedonEtLIRA,谢谢您的帮助。最后,我选择将
simpledapter
更改为ArrayAdapter
public class MyPlayListAdapter extends ArrayAdapter<Song> {
private ArrayList<Song> songsList;
private ArrayList<Song> playlistcheck = new ArrayList<Song>();
private ArrayList <Song> retained_songsList = new ArrayList<Song>();
private String folderMode;
private String TAG = "AndroidMediaCenter";
public MyPlayListAdapter(Context context, int textViewResourceId, ArrayList<Song> songsList, ArrayList<Song> retained_songsList, String folderMode) {
super(context, textViewResourceId, songsList);
this.songsList = songsList;
this.retained_songsList = retained_songsList;
this.folderMode = folderMode;
}
埃多内特拉,谢谢你的帮助。最后,我选择将
simpledapter
更改为ArrayAdapter
public class MyPlayListAdapter extends ArrayAdapter<Song> {
private ArrayList<Song> songsList;
private ArrayList<Song> playlistcheck = new ArrayList<Song>();
private ArrayList <Song> retained_songsList = new ArrayList<Song>();
private String folderMode;
private String TAG = "AndroidMediaCenter";
public MyPlayListAdapter(Context context, int textViewResourceId, ArrayList<Song> songsList, ArrayList<Song> retained_songsList, String folderMode) {
super(context, textViewResourceId, songsList);
this.songsList = songsList;
this.retained_songsList = retained_songsList;
this.folderMode = folderMode;
}
你在问什么?例外是什么,或者你需要一个新的适配器算法?投票否决我有点苛刻!第一行表示我需要将多个对象传递给简单适配器。代码就是我尝试的方式。那不行。那…怎么办?你在问什么?例外是什么,或者你需要一个新的适配器算法?投票否决我有点苛刻!第一行表示我需要将多个对象传递给简单适配器。代码就是我尝试的方式。那不行。那么…怎么做?