我正在使用47deg / android-swipelistview库,我遇到了一些问题。我有listview包含每个列表项中的按钮。但是当我滑动其中一个列表项以解除它时。它成功解散但是之后其他列表项中的所有按钮都停止工作,请帮帮我。我正在使用自定义列表适配器和视图持有者模式。
谢谢。
这是我的代码
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Locale;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Environment;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.NetworkImageView;
public class FeedListAdapter extends BaseAdapter
{
private Activity activity;
private LayoutInflater inflater;
private List<Word> feedItems;
Animation animFadeOut;
public static int postid=0;
Context context;
DatabaseHandler db;
AnimationDrawable drawable;
TextToSpeech ttobj;
public LruBitmapCache cache;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public static String URL_FEED = "http://hashmedia.in/vocabmeme/webservices/vote";
static WordHolder holder = null;
static class WordHolder{
TextView post_word,comment_count,post_id ;
ImageView post_image1;
NetworkImageView post_image;
ImageButton voice,openword;
}
public FeedListAdapter(Activity activity, List<Word> feedItems,Context context)
{
this.activity = activity;
this.feedItems = feedItems;
this.context=context;
}
@Override
public int getCount() {
return feedItems.size();
}
@Override
public Object getItem(int location) {
return feedItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
db = new DatabaseHandler(activity.getApplicationContext());
final View parentView=convertView;
holder = null;
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
if(convertView == null)
{
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
holder = new WordHolder();
convertView = inflater.inflate(R.layout.feed_item,parent,false);
holder.post_word = (TextView) convertView.findViewById(R.id.post_word);
holder.voice = (ImageButton) convertView.findViewById(R.id.voice);
holder.openword=(ImageButton) convertView.findViewById(R.id.openword);
holder.comment_count=(TextView) convertView.findViewById(R.id.comment_count);
holder.post_id=(TextView) convertView.findViewById(R.id.post_id);
holder.post_image1 = (ImageView) convertView.findViewById(R.id.post_image1);
holder.post_image = (NetworkImageView) convertView.findViewById(R.id.post_image);
holder.post_image1.setTag(holder);
holder.post_image.setTag(holder);
holder.openword.setTag(holder);
holder.voice.setTag(holder);
convertView.setTag(holder);
}
else
{
holder = (WordHolder)convertView.getTag();
holder.post_image1.setTag(holder);
holder.post_image.setTag(holder);
holder.openword.setTag(holder);
holder.voice.setTag(holder);
System.out.println("Holder"+ convertView.getTag());
}
final Word item = feedItems.get(position);
holder.voice.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(final View v)
{
animFadeOut = AnimationUtils.loadAnimation(activity.getApplicationContext(),R.anim.splash);
animFadeOut.setAnimationListener(new AnimationListener()
{
@Override
public void onAnimationStart(Animation animation)
{
Drawable replacer = activity.getResources().getDrawable(R.drawable.ic_action_volume_off);
((ImageButton) v).setImageDrawable(replacer);
}
@Override
public void onAnimationEnd(Animation animation)
{
Drawable replacer = activity.getResources().getDrawable(R.drawable.ic_action_volume_on);
((ImageButton) v).setImageDrawable(replacer);
}
@Override
public void onAnimationRepeat(Animation animation)
{
}
});
holder = (WordHolder) v.getTag();
holder.voice.startAnimation(animFadeOut);
View test=(View) v.getParent().getParent();
// String textview2 = ((TextView) row.findViewById(R.id.post_word)).getText().toString();
AudioManager am = (AudioManager)activity.getSystemService(Context.AUDIO_SERVICE);
int amStreamMusicMaxVol = am.getStreamMaxVolume(am.STREAM_MUSIC);
am.setStreamVolume(am.STREAM_MUSIC, amStreamMusicMaxVol, 0);
ttobj.speak(holder.post_word.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
}
});
ttobj=new TextToSpeech(activity.getApplicationContext(),new TextToSpeech.OnInitListener()
{
@Override
public void onInit(int status)
{
if(status != TextToSpeech.ERROR)
{
ttobj.setLanguage(Locale.ENGLISH);
}
}
});
holder.openword.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(final View v)
{
holder = (WordHolder) v.getTag();
Intent i = new Intent(activity, WordActivity.class);
i.putExtra("post_id",Integer.parseInt(holder.post_id.getText().toString()));
i.putExtra("post_image",item.getImage());
i.putExtra("post_word",item.getWord());
i.putExtra("post_comment", holder.comment_count.getText().toString());
context.startActivity(i);
}
});
holder.post_image.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(final View v)
{
holder = (WordHolder) v.getTag();
Intent i = new Intent(activity, WordActivity.class);
i.putExtra("post_id",Integer.parseInt(holder.post_id.getText().toString()));
i.putExtra("post_image",item.getImage());
i.putExtra("post_word",item.getWord());
i.putExtra("post_comment", holder.comment_count.getText().toString());
context.startActivity(i);
}
});
holder.post_image1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(final View v)
{
holder = (WordHolder) v.getTag();
Intent i = new Intent(activity, WordActivity.class);
i.putExtra("post_id",Integer.parseInt(holder.post_id.getText().toString()));
i.putExtra("post_image",item.getImage());
i.putExtra("post_word",item.getWord());
i.putExtra("post_comment", holder.comment_count.getText().toString());
context.startActivity(i);
}
});
holder.post_word.setText(item.getWord());
holder.post_id.setText(Integer.toString(item.getID()));
holder.comment_count.setText(Integer.toString(item.getCommentCount()));
final String imagefilename=item.getImage();
Bitmap myBitmap;
File imgFile = getOutputMediaFile(imagefilename);
cache = AppController.getInstance().getLruBitmapCache();
if(!imagefilename.substring(imagefilename.length()-4).equals(".gif"))
{
try
{
myBitmap=cache.get(item.getImage());
if(myBitmap!=null)
{
holder.post_image1.setImageBitmap(myBitmap);
holder.post_image1.setVisibility(View.VISIBLE);
holder.post_image.setVisibility(View.GONE);
}
else
{
if(imgFile.exists())
{
myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
cache.put(item.getImage(), myBitmap);
holder.post_image1.setImageBitmap(myBitmap);
holder.post_image1.setVisibility(View.VISIBLE);
holder.post_image.setVisibility(View.GONE);
}
else
{
holder.post_image1.setVisibility(View.GONE);
holder.post_image.setVisibility(View.VISIBLE);
holder.post_image.setImageUrl("http://hashmedia.in/vocabmeme/images/words/"+item.getImage(), imageLoader);
}
}
}
catch(NullPointerException e)
{
e.printStackTrace();
}
}
else
{
holder.post_image.setVisibility(View.GONE);
holder.post_image1.setVisibility(View.GONE);
try
{
final String _url="http://hashmedia.in/vocabmeme/images/words/"+imagefilename;
if(imgFile.exists())
{
drawable = new GifAnimationDrawable(imgFile, false);
holder.post_image1.setImageDrawable(drawable);
holder.post_image1.setVisibility(View.VISIBLE);
}
else
{
new AsyncTask<Void, Void, Void>()
{
File pictureFile;
@Override
protected Void doInBackground(Void... params)
{
int count;
try
{
pictureFile = getOutputMediaFile(imagefilename);
URL url = new URL(_url);
URLConnection conection = url.openConnection();
conection.connect();
int lenghtOfFile = conection.getContentLength();
InputStream input = new BufferedInputStream(url.openStream(),8192);
OutputStream output = new FileOutputStream(pictureFile);
byte data[] = new byte[1024];
long total_c = 0;
while ((count = input.read(data)) != -1)
{
total_c += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e)
{
Log.e("Error: ", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Void file_url)
{
try
{
drawable = new GifAnimationDrawable(pictureFile, false);
} catch (IOException e)
{
e.printStackTrace();
}
holder.post_image1.setVisibility(View.VISIBLE);
}
}.execute();
}
}catch (Exception e)
{
e.printStackTrace();
}
}
return convertView;
}
private File getOutputMediaFile(String name)
{
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
File mediaStorageDir = new File(Environment.getExternalStorageDirectory()
+ "/Android/data/"
+ "vocab.meme1"
+ "/Files");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (! mediaStorageDir.exists())
{
if (! mediaStorageDir.mkdirs())
{
return null;
}
}
// Create a media file name
File mediaFile;
String mImageName=name;
mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
return mediaFile;
}
}