我想使用ListView
中的多个元素填充custom ListView Adapter
。
我尝试了this tutorial。
不会抛出任何异常,但它在我的ListView
中没有显示任何内容。
以下是代码:
Lyrics.java:
package de.lichtenberger.gottschalk.android;
import static de.lichtenberger.gottschalk.android.Constant.DAUER;
import static de.lichtenberger.gottschalk.android.Constant.INTERPRET;
import static de.lichtenberger.gottschalk.android.Constant.TITEL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import com.parse.FindCallback;
import com.parse.Parse;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;
public class Lyrics extends Activity {
ImageButton back;
ListView songList;
TextView textAnzeige;
private ArrayList<String> Titelliste = new ArrayList<String>();
private ArrayList<String> Interpretliste = new ArrayList<String>();
private ArrayList<String> Dauerliste = new ArrayList<String>();
private ArrayAdapter<String> aa;
private SAdapter sA;
ProgressDialog dialog;
private ArrayList<HashMap> list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lyrics);
Parse.initialize(this, "hGxasGU6e0WQAOh5JIOGDfvFBKrYyBJKXIzxBfAG", "WsOPsXerpsFjsjekKKbZnnjAHvXy5PQHVQEB8Cqu");
setupUI();
setupOnClickListeners();
new getData().execute();
populateList();
sA = new SAdapter(this, list);
songList.setAdapter(sA);
sA.notifyDataSetChanged();
}
private void populateList() {
list = new ArrayList<HashMap>();
HashMap temp = new HashMap();
for(int i=1; i<= Titelliste.size(); i++){
temp.put(TITEL, Titelliste.get(i).toString());
temp.put(INTERPRET, Interpretliste.get(i).toString());
temp.put(DAUER, Dauerliste.get(i).toString());
list.add(temp);
}
}
private class getData extends AsyncTask<Void, Void, SAdapter>{
ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(Lyrics.this);
dialog.setMessage("Please wait, while loading!");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}
@Override
protected SAdapter doInBackground(Void... params) {
ParseQuery pq = new ParseQuery("SongDatenbank");
pq.whereExists("Titel");
pq.findInBackground(new FindCallback() {
@Override
public void done(List<ParseObject> liederListe, ParseException e) {
if(e==null){
Log.d("Parse", "Objektliste empfangen");
ParseObject x;
for(int i=0;i<liederListe.size();i++){
x = liederListe.get(i);
Titelliste.add(x.getString("Titel"));
Dauerliste.add(x.getString("Dauer"));
Interpretliste.add(x.getString("Interpret"));
}
x = liederListe.get(0);
Log.d("Parse", x.getString("Titel"));
}else{
Log.d("Parse", "Objektliste nicht empfangen");
}
}
});
return null;
}
protected void onPostExecute(SAdapter result) {
dialog.dismiss();
populateList();
sA = new SAdapter(Lyrics.this, list);
songList.setAdapter(sA);
sA.notifyDataSetChanged();
}
}
private void setupOnClickListeners() {
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent back = new Intent(Lyrics.this, Lagerfeuer_Lieder.class);
startActivity(back);
}
});
}
private void setupUI() {
back = (ImageButton)findViewById(R.id.back);
songList = (ListView)findViewById(R.id.list);
textAnzeige = (TextView)findViewById(R.id.lyricsView);
}
}
我的适配器:
package de.lichtenberger.gottschalk.android;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import static de.lichtenberger.gottschalk.android.Constant.DAUER;
import static de.lichtenberger.gottschalk.android.Constant.TITEL;
import static de.lichtenberger.gottschalk.android.Constant.INTERPRET;
public class SAdapter extends BaseAdapter
{
public ArrayList<HashMap> list;
Activity activity;
public SAdapter(Activity activity, ArrayList<HashMap> list) {
super();
this.activity = activity;
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
private class ViewHolder {
TextView titel;
TextView artist;
TextView duration;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater = activity.getLayoutInflater();
if (convertView == null)
{
convertView = inflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.titel = (TextView) convertView.findViewById(R.id.title);
holder.artist = (TextView) convertView.findViewById(R.id.artist);
holder.duration = (TextView) convertView.findViewById(R.id.duration);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
HashMap map = list.get(position);
holder.titel.setText(map.get(TITEL).toString());
holder.artist.setText(map.get(INTERPRET).toString());
holder.duration.setText(map.get(DAUER).toString());
return convertView;
}
}
这里是我的activity_lyrics.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background" >
<ImageButton
android:layout_width="150dp"
android:layout_height="40dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_marginRight="0dp"
android:contentDescription="back"
android:id="@+id/back"
android:background="@drawable/back"
android:text="@string/Lagerfeuer"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_alignTop="@id/back"
android:layout_toRightOf="@id/back"
android:background="@drawable/back2"
android:contentDescription="back2"/>
<ListView
android:layout_below="@id/back"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#b5b5b5"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector"
android:id="@+id/list"
/>
</RelativeLayout>
我的list_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/list_selector"
android:orientation="horizontal"
android:padding="5dip" >
<!-- ListRow Left sied Thumbnail image -->
<LinearLayout android:id="@+id/thumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dip"
android:layout_alignParentLeft="true"
android:background="@drawable/image_bg"
android:layout_marginRight="5dip">
<ImageView
android:id="@+id/list_image"
android:layout_width="50dip"
android:layout_height="50dip"
android:src="@drawable/guitar_1"/>
</LinearLayout>
<!-- Title Of Song-->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/thumbnail"
android:layout_toRightOf="@+id/thumbnail"
android:text="Rihanna Love the way lie"
android:textColor="#040404"
android:typeface="sans"
android:textSize="15sp"
android:textStyle="bold"/>
<!-- Artist Name -->
<TextView
android:id="@+id/artist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:textColor="#343434"
android:textSize="10sp"
android:layout_marginTop="1dip"
android:layout_toRightOf="@+id/thumbnail"
android:text="Just gona stand there and ..." />
<!-- Rightend Duration -->
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/title"
android:gravity="right"
android:text="5:45"
android:layout_marginRight="5dip"
android:textSize="10sp"
android:textColor="#10bcc9"
android:textStyle="bold"/>
</RelativeLayout>
如果有人能查看该代码并且可以给我一些如何解决问题的建议,我将非常感激。
答案 0 :(得分:2)
在AsyncTask的onPostExecute
方法执行完成后,使用doInBackground
为ListView设置Adapter,而不是在执行AsyncTask之后立即调用它:
@Override
protected void onPostExecute(SAdapter result) {
dialog.dismiss();
// populate Listview here...
populateList();
sA = new SAdapter(Lyrics.this, list);
songList.setAdapter(sA);
sA.notifyDataSetChanged();
}
答案 1 :(得分:0)
listview= (ListView)findViewById(R.id.listview);
listview.setOnItemSelectedListener(this);
String days[] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
ArrayAdapter<String> newAdpt= new ArrayAdapter<String>(this,android.R.layout.simple_listview_item,days);
newAdpt.setDropDownViewResource(android.R.layout.select_dialog_singlechoice);
listview.setAdapter(newAdpt);
答案 2 :(得分:0)
您可以使用以下内容:
@Override
protected void onPostExecute(List<Contact> result) {
super.onPostExecute(result);
dialog.dismiss();
adpt.setItemList(result);
adpt.notifyDataSetChanged();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.setMessage("Downloading contacts...");
dialog.show();
}
你可以看看here(Android Async ListView-JEE和RestFul)
答案 3 :(得分:0)
可能是一个愚蠢的答案,但
HashMap是一种原始类型。应该参数化泛型类型HashMap
尝试:
HashMap <String, String> map
在适配器和主类体中更改它。 同样的问题发生在我身上,但不知道为什么,只有我看到的差异就是hashmap引用。