2016-07-11 39 views
1

Nachdem eine Nachricht gefallen ist, zeigt die Herz-Taste Rot und Zähler auf 1, aber nach dem Auf- und Abwärtsscrollen geht der Zähler auf Null und die Herz-Taste zurück wechselt von Rot zu Asche, wie vom Server geladen. Ich habe versucht, mit notifyDataSetChanged(), aber nicht im Adapter funktioniert .... unten ist der Code ich implementiert.Wie Knopf und ähnlicher Zähler nach dem Auf- und Abwärtsscrollen in der Listenansicht

public class ListViewAdapterSup extends BaseAdapter { 

// Declare Variables 
Context context; 
LayoutInflater inflater; 
ArrayList<HashMap<String, String>> data; 
ImageLoader imageLoader; 
HashMap<String, String> resultp = new HashMap<String, String>(); 



public ListViewAdapterSup(Context context, 
     ArrayList<HashMap<String, String>> arraylist) { 
    this.context = context; 
    data = arraylist; 
    imageLoader = new ImageLoader(context); 
} 

@Override 
public int getCount() { 
    return data.size(); 
} 



@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

static class ViewHolder { 

    // Declare Variables 
    TextView supmessageTV; 
    ImageView ImageLike; 
    ImageView ImageComment; 
} 

ViewHolder holder; 



public View getView(final int position, View itemView, ViewGroup parent)  { 
    itemView = null; 

    if (itemView == null) { 

     //itemView.setTag(); 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    itemView = inflater.inflate(R.layout.sups_list_item, parent, false); 
    // Get the position 
    resultp = data.get(position); 
    holder = new ViewHolder(); 

    // Locate the TextViews in listview_item.xml 
    holder.messageTV = (TextView) itemView.findViewById(R.id.status); 
    // Locate the ImageView in listview_item.xml 
    holder.ImageLike = (ImageView) itemView.findViewById(R.id.likeImage); 
    holder.ImageComment = (ImageView) itemView.findViewById(R.id.ImageComment); 

    holder.viewLikesImageClick = (ImageView) itemView.findViewById(R.id.imageVieew); 

    } 

    else{ 

     holder = (ViewHolder) itemView.getTag(); 
    } 




    // Capture position and set results to the TextViews 
    holder.messageTV.setText(resultp.get(News.MESSAGE)); 
    holder.likesCountTV.setText(resultp.get(News.LIKES_COUNT)); 
    holder.commentsCountTV.setText(resultp.get(News.COMMENTS_COUNT)); 



      holder.ImageLike.setTag(holder); 
      holder.ImageLike.setOnClickListener(new View.OnClickListener() { 
       @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
       @Override 
       public void onClick(View view) { 

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 

         holder = (ViewHolder)view.getTag(); 
          resultp = data.get(position); 

          if(holder.ImageLike.getDrawable().getConstantState().equals(context.getResources().getDrawable(R.drawable.ic_favorite_white_24dp).getConstantState())){ 
          resultp = data.get(position); 

           ConnectionDetector cd = new ConnectionDetector(context); 
           if (!cd.isConnectingToInternet()) { 

            Toast.makeText(context,"No internet connection",Toast.LENGTH_SHORT).show(); 


            } 
           else 
           { 

           new LikeNews().execute(); 
           String number = holder.likesCountTV.getText().toString(); 
           int num = Integer.parseInt(number); 
           int nene = num + 1; 
           String str = String.valueOf(nene); 

           holder.likesCountTV.setText(str); 

           //holder.likeBTN.setText("LIKED"); 
           holder.ImageLike.setImageResource(R.drawable.ic_favorite_red_24dp); 

           } 

         } 

          else if(holder.ImageLike.getDrawable().getConstantState().equals(context.getResources().getDrawable(R.drawable.ic_favorite_red_24dp).getConstantState())){ 
           resultp = data.get(position); 

            ConnectionDetector cd = new ConnectionDetector(context); 
            if (!cd.isConnectingToInternet()) { 

             Toast.makeText(context,"No internet connection",Toast.LENGTH_SHORT).show(); 


             } 
            else 
            { 

            new UnLikeNews().execute(); 
            String number = holder.likesCountTV.getText().toString(); 
            int num = Integer.parseInt(number); 
            int nene = num - 1; 
            String str = String.valueOf(nene); 

            holder.likesCountTV.setText(str); 

            // holder.likeBTN.setText("Like"); 
            holder.ImageLike.setImageResource(R.drawable.ic_favorite_white_24dp); 

            } 
           } 

         } 

          else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

           holder = (ViewHolder)view.getTag(); 
           resultp = data.get(position); 

           if(holder.ImageLike.getDrawable().getConstantState().equals(holder.ImageLike.getContext().getDrawable(R.drawable.ic_favorite_white_24dp).getConstantState())){ 
           resultp = data.get(position); 

            ConnectionDetector cd = new ConnectionDetector(context); 
            if (!cd.isConnectingToInternet()) { 

             Toast.makeText(context,"No internet connection",Toast.LENGTH_SHORT).show(); 


             } 
            else 
            { 

            new LikeNews().execute(); 
            String number = holder.likesCountTV.getText().toString(); 
            int num = Integer.parseInt(number); 
            int nene = num + 1; 
            String str = String.valueOf(nene); 

            holder.likesCountTV.setText(str); 

            holder.ImageLike.setImageResource(R.drawable.ic_favorite_red_24dp); 

            } 

          } 

           else if(holder.ImageLike.getDrawable().getConstantState().equals(holder.ImageLike.getContext().getDrawable(R.drawable.ic_favorite_red_24dp).getConstantState())){ 
            resultp = data.get(position); 

             ConnectionDetector cd = new ConnectionDetector(context); 
             if (!cd.isConnectingToInternet()) { 

              Toast.makeText(context,"No internet connection",Toast.LENGTH_SHORT).show(); 


              } 
             else 
             { 

             new UnLikeNews().execute(); 
             String number = holder.likesCountTV.getText().toString(); 
             int num = Integer.parseInt(number); 
             int nene = num - 1; 
             String str = String.valueOf(nene); 

             holder.likesCountTV.setText(str); 

             holder.ImageLike.setImageResource(R.drawable.ic_favorite_white_24dp); 

             } 
            } 

          } 



       } 
      }); 


    return itemView; 
} 


public class LikeNews extends AsyncTask<String, String, String> { 

    boolean hasUserLiked = false; 

    protected void onPreExecute() { 
     super.onPreExecute(); 

    } 

    @Override 
    protected String doInBackground(String... strings) { 

      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("www.example.com"); 


      try { 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 

        nameValuePairs.add(new BasicNameValuePair("id", "01")); 
        nameValuePairs.add(new BasicNameValuePair("username", user)); 
        nameValuePairs.add(new BasicNameValuePair("user_involved", "mark"); 

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
        httpclient.execute(httppost); 

        hasUserLiked = true; 

     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String lenghtOfFile) { 



    } 

} 

public class UnLikeNews extends AsyncTask<String, String, String> { 

protected void onPreExecute() { 
    super.onPreExecute(); 

} 

@Override 
protected String doInBackground(String... strings) { 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("www.example.com"); 


     try { 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 

       nameValuePairs.add(new BasicNameValuePair("id", "01")); 
       nameValuePairs.add(new BasicNameValuePair("username", user)); 

       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       httpclient.execute(httppost); 



    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(String lenghtOfFile) { 

//  


} 


} 




} 

Antwort

0

Sie müssen die ViewHolder Muster folgen.

Anruf setTag auf itemView, in viewHolder Artikel Ihren Halter nach Einrichtung vorbei. Siehe letzte Zeile vor hier Klammer endet:

if (itemView == null) { 

     //itemView.setTag(); 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    itemView = inflater.inflate(R.layout.sups_list_item, parent, false); 
    // Get the position 
    resultp = data.get(position); 
    holder = new ViewHolder(); 

    // Locate the TextViews in listview_item.xml 
    holder.messageTV = (TextView) itemView.findViewById(R.id.status); 
    // Locate the ImageView in listview_item.xml 
    holder.ImageLike = (ImageView) itemView.findViewById(R.id.likeImage); 
    holder.ImageComment = (ImageView) itemView.findViewById(R.id.ImageComment); 

    holder.viewLikesImageClick = (ImageView)  itemView.findViewById(R.id.imageVieew); 

    itemView.setTag(holder); 

} 

Das bedeutet, wenn Sie auf die Linie bekommen

holder = (ViewHolder) itemView.getTag(); 

getTag kehrt das holder Objekt, das Sie als Tag festgelegt, so ist es richtig, die View recyceln kann, wenn Die View ist nicht null.

Sie sollten auch Ihre getItem im Adapter aktualisieren, um das korrekte Objekt zurückzugeben.

@Override 
public Object getItem(int position) { 
    return data.get(position); 
} 
+0

ich habe es ausprobiert und es hat nicht meine bearbeiten –

+0

Bitte sehen und sehen Sie arbeiten, wenn es –

+0

hilft habe ich versucht es und es immer noch nicht funktioniert: ( –

1

resultp = data.get(position); sollte außerhalb wenn sonst Schleife sein.

+0

Ich versuchte es und immer noch nicht funktioniert hat –

+0

Sie aktualisieren Daten Arraylist nicht von HashMap nach LikeNews onPostExecution.Setzen Sie einen neuen Zählerwert auf resultp LIKES_COUNT und rufen Sie notifyDataSetChanged auf. –

+0

Hallo Giteeka, ich verstehe Sie nicht gut, bitte helfen Sie mit Code –