我的Listview有重复的问题,我有分页列表查看每件事情都运行正常但问题是当向下滚动并附加新项目时新项目操作与旧项目重复
示例:
如果我点击项目编号11,则会扩展项目11和编号1
我在观点中搞乱了什么!
AsyncTask,它将新项目附加到适配器
public class ringtones extends AsyncTask<String,String, String> {
JSONObject data = null;
String response = null;
Dialog dialog;
@Override
protected void onPreExecute() {
dialog = new Dialog(Ringtones.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog);
dialog.setCancelable(false);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.show();
appendMore = false;
}
@Override
protected String doInBackground(String... params) {
Log.e("Ring ListView" ,"in Background");
if ( applysort == true )
{
page = 1;
}
if ( query.trim().equals("") == false && appendMore == false)
{
page = 1;
}
response = Api.getringtonesList("&page="+page+"&limit="+limit+"&q="+query+"&sortby="+sortby);
return response;
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
if ( response != null )
{
if ( query.trim().equals("") == false && appendMore == false)
{
la.clear();
la.notifyDataSetChanged();
}
if ( applysort == true )
{
la.clear();
la.notifyDataSetChanged();
applysort = false;
}
try {
data = new JSONObject(result);
int last_page = data.getInt("last_page");
try {
// Getting Array of Contacts
JSONArray files = data.getJSONArray("ringtones");
Toast.makeText(context, "found " + files.length(), 0).show();
if ( files.length() != 0 )
{
for(int i = 0; i < files.length(); i++)
{
//extract file info
JSONObject f = files.getJSONObject(i);
tonebit.add(f);
}
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("Ring ListView" ,"Faild get Json ringtones : "+e.getMessage());
}
if ( last_page > page )
{
appendMore = true;
page++;
}
la.notifyDataSetChanged();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("Ring ListView" ,"Faild convert String to Json : "+e.getMessage());
}
}
}
}
这是Listview类
public class Ringtones_Listview extends ArrayAdapter<Object> {
int resource;
String response;
Context context;
private LayoutInflater mInflater;
MediaPlayer mp = null;
ImageView play_clicked;
View vv = null;
String lang = Locale.getDefault().getDisplayLanguage();
public Ringtones_Listview(Context context, int resource, List objects) {
super(context, resource, objects);
this.context = context;
this.resource = resource;
mInflater = LayoutInflater.from(context);
}
static class ViewHolder {
ImageView play ;
ImageView download ;
TextView rtitle;
TextView size;
TextView downloads;
TextView personname;
TextView date;
RatingBar ratingsmall;
ImageView ratebutton;
long tonid;
TextView voters;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
//Get the current location object
JSONObject r = (JSONObject) getItem(position);
//Inflate the view
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.ringtone_bit, null);
holder = new ViewHolder();
convertView.setTag(holder);
holder.play = ( ImageView ) convertView.findViewById(R.id.play);
holder.download = ( ImageView ) convertView.findViewById(R.id.download);
holder.ratebutton = ( ImageView ) convertView.findViewById(R.id.ratebutton);
holder.rtitle = (TextView) convertView.findViewById(R.id.rtitle);
holder.size = (TextView) convertView.findViewById(R.id.size);
holder.downloads = (TextView) convertView.findViewById(R.id.downloads);
holder.voters = (TextView) convertView.findViewById(R.id.voters);
holder.personname = (TextView) convertView.findViewById(R.id.personname);
holder.date = (TextView) convertView.findViewById(R.id.date);
holder.ratingsmall = (RatingBar) convertView.findViewById(R.id.ratingsmall);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
//set person name
try {
String client_name = ( r.getString("personname").equals( "null" ) == true ) ? "ghost" : r.getString("personname");
holder.personname.setText(client_name);
} catch (JSONException e2) {}
//set total votars and vote avarage
try {
float z = (float) r.getInt("rate");
holder.voters.setText(" ( "+ r.getLong("voters") +" ) / " + z);
} catch (JSONException e2) {}
//set rating bar
try {
float z = (float) r.getInt("rate");
holder.ratingsmall.setRating(z);
} catch (JSONException e2) {}
//set ringtone Name as defualt device language
try {
String name = ( lang.equals( "English" ) == true ) ? r.getString("en_name") : r.getString("ar_name");
holder.rtitle.setText(name);
} catch (JSONException e2) {}
//ringtone file size
try {
holder.size.setText(r.getString("size"));
} catch (JSONException e2) {}
//set downloads
try {
holder.downloads.setText(String.valueOf( r.getLong("downloads") ));
} catch (JSONException e2) {}
//set ringtone ID toneid
try {
holder.tonid = r.getLong("toneid");
holder.download.setTag(r.getLong("toneid"));
holder.ratebutton.setTag(r.getLong("toneid"));
holder.play.setId((int) r.getLong("toneid"));
convertView.setId((int) r.getLong("toneid"));
} catch (JSONException e1) {}
//set download stram url to play icon
try {
holder.play.setTag(r.getString("stream_url"));
} catch (JSONException e) {}
//add play listener test Ringtone before download it
holder.play.setOnClickListener(onClickListener);
convertView.setTag(holder);
return convertView;
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(final View v) {
boolean playit = false;
v.setMinimumHeight(200);
//stop Media player dont play any thing
if ( mp != null )
{
mp.stop();
mp.release();
mp = null;
}
//check for last clicked item
if ( vv != null )
{
//set last played item to play icon
vv.setBackgroundResource(R.drawable.play);
//check if last played is not smae clicked item
if( v.getTag().toString().equals( vv.getTag().toString() ) == false )
{
playit = true;
}else
//its same item dont play stop here
{
vv = null;
}
}else
//nothing played yet play it
{
playit = true;
}
if ( playit )
{
vv = v;
v.setBackgroundResource(R.drawable.preparing_player);
AnimationDrawable frameAnimation = (AnimationDrawable) v.getBackground();
frameAnimation.start();
String stramUrl = String.valueOf(v.getTag());
try {
mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(stramUrl);
mp.prepareAsync();
} catch (Exception e) {}
//preparing straming
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mps) {
v.setBackgroundResource(R.drawable.played);
mps.start();
}
});
mp.setOnCompletionListener( new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
v.setBackgroundResource(R.drawable.play);
}
});
}
}
};
}
答案 0 :(得分:-1)
try {
holder.play.setTag(r.getString("stream_url"));
} catch (JSONException e) {}
//add play listener test Ringtone before download it
holder.play.setOnClickListener(onClickListener);
//remove this one
// convertView.setTag(holder);
return convertView;
删除最后一个convertView.setTag(holder)
;在你的getView();