获取ListView更新或刷新后,按钮单击无法正常工作

时间:2014-12-04 13:32:17

标签: android android-layout listview swipeview

我正在使用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;
    } 

}

0 个答案:

没有答案