2017-01-18 7 views
-1

Я создал картографию с recyclerview и на одной карте я поместил четыре textView, и я хочу изменить текст textView на клике того же textView. Когда я пытаюсь сделать это, он также применяется на других карточках. Как у меня есть четыре карты, и у каждой карты есть textView, Когда я меняю текст с любимого на клик, как на facebook, и после этого загружаю больше данных на прокрутку. Но после загрузки данных я вижу, что, как TextView уже измененный на вновь загруженные картах также по default.Here моего адаптер:Я хочу изменить текст textView картой на клик textView в android

package common; 
import android.app.Activity; 
import android.app.Dialog; 
import android.content.Context; 
import android.content.Intent; 
import android.content.res.ColorStateList; 
import android.graphics.Bitmap; 
import android.graphics.Color; 
import android.net.Uri; 
import android.support.customtabs.CustomTabsIntent; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.view.WindowManager; 
import android.view.animation.Animation; 
import android.view.animation.LinearInterpolator; 
import android.view.animation.RotateAnimation; 
import android.widget.AbsListView; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 
import com.rate.sky.rate.LoginActivity; 
import com.rate.sky.rate.R; 
import com.squareup.picasso.Picasso; 

import java.util.ArrayList; 
import java.util.List; 

import static android.R.attr.targetActivity; 
import static android.R.attr.width; 
import static com.rate.sky.rate.R.attr.height; 
import static com.rate.sky.rate.R.attr.title; 

/** 
* Created by sky on 12/18/2016. 
*/ 

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> { 

    UserAuth auth; 
    private Activity activity; 
    private ImageLoader imageLoader; 
    private ArrayList<ListItem> list; 
    ListItem listItem; 


    public CardAdapter(Activity activity,ArrayList<ListItem> listVal){ 
     super(); 
     this.activity = activity; 
     this.list=listVal; 

    } 

    public ListItem getItem(int position) { 
     return list.get(position); 
    } 

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


    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.list_card_view, parent, false); 
     ViewHolder viewHolder = new ViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     listItem = getItem(position); 
     try { 
      imageLoader = CustomVolleyRequest.getInstance(activity.getApplicationContext()) 
        .getImageLoader(); 
      imageLoader.get(listItem.getUrl(), ImageLoader.getImageListener(holder.thumbnail, 
        android.R.drawable.ic_dialog_alert, 
        android.R.drawable.ic_dialog_alert)); 
      holder.thumbnail.setImageUrl(listItem.getUrl(), imageLoader); 
      holder.textViewContent.setText(listItem.getTitle()); 
     }catch (Exception e){ 
      Log.d("Error--",e.toString()); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return list.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     public NetworkImageView thumbnail; 
     public ImageView imageShare, imageComment, imageVote, imageDownvote; 
     public TextView textViewVoteButton, textViewDownVoteButton, textViewCommentButton, textViewContent; 
     public TextView txtVoteCount, txtDownVoteCount, txtCommentCount; 
     public Button rateButton; 
     CustomTabsIntent customTabsIntent; 
     CustomTabsIntent.Builder intentBuilder; 


     public ViewHolder(final View itemView) { 
      super(itemView); 
      //Toast.makeText(itemView.getContext(),"Hello",Toast.LENGTH_LONG).show(); 
      auth = new UserAuth(itemView.getContext()); 
      thumbnail = (NetworkImageView) itemView.findViewById(R.id.thumbnail); 
      rateButton = (Button) itemView.findViewById(R.id.button2); 
      imageShare = (ImageView) itemView.findViewById(R.id.imageView4); 
      imageComment = (ImageView) itemView.findViewById(R.id.imageViewComment); 
      textViewContent = (TextView) itemView.findViewById(R.id.textView); 
      textViewVoteButton = (TextView) itemView.findViewById(R.id.textView3); 
      textViewDownVoteButton = (TextView) itemView.findViewById(R.id.textView5); 
      textViewCommentButton = (TextView) itemView.findViewById(R.id.textView4); 
      imageVote = (ImageView) itemView.findViewById(R.id.imageViewVote); 
      imageDownvote = (ImageView) itemView.findViewById(R.id.imageViewDownvote); 
      txtVoteCount = (TextView) itemView.findViewById(R.id.textViewVoteCount); 
      txtDownVoteCount = (TextView) itemView.findViewById(R.id.textViewDownvote); 
      txtCommentCount = (TextView) itemView.findViewById(R.id.textViewComments); 
      /*Custome chrome tab view*/ 
      intentBuilder = new CustomTabsIntent.Builder(); 
      // Set toolbar(tab) color of your chrome browser 
      intentBuilder.setToolbarColor(ContextCompat.getColor(itemView.getContext(), R.color.colorPrimary)); 
      customTabsIntent = intentBuilder.build(); 
      /*End*/ 
      /* 
       Changing the text of textview 
      */ 
      imageVote.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (auth.getLoginWith().equals("G") || auth.getLoginWith().equals("F")) { 
         vote(); 
        } else { 
         Intent intent = new Intent(v.getContext(), LoginActivity.class); 
         v.getContext().startActivity(intent); 
        } 
       } 
      }); 

      textViewVoteButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (auth.getLoginWith().equals("G") || auth.getLoginWith().equals("F")) { 
         vote(); 
        } else { 
         Intent intent = new Intent(v.getContext(), LoginActivity.class); 
         v.getContext().startActivity(intent); 
        } 
       } 
      }); 



     } 

     public void vote() { 
      RotateAnimation anim = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
      anim.setInterpolator(new LinearInterpolator()); 
      anim.setDuration(400); 
      imageVote.startAnimation(anim); 
      ColorStateList mList = textViewVoteButton.getTextColors(); 
      int color = mList.getDefaultColor(); 
      if (color == Color.BLUE) { 
       textViewVoteButton.setTextColor(Color.GRAY); 
      } else { 
       textViewVoteButton.setTextColor(Color.BLUE); 

      } 
     } 


    } 
} 
+0

Проблема в коде ... – Selvin

+0

Спасибо за ответ @Selvin, но можете ли вы предложить, какая проблема может быть? –

+1

Проблема в том, что вы не знаете, как задать вопрос ... Программисты не используют магические шары, так что трудно понять, где проблема без кода – Selvin

ответ

1

RecyclerView перерабатывает взгляды, что означает, что при прокрутке он принимает уже существующий вид и переставляет его для другой записи в списке. Этот вид не получает волшебного сброса, он остается таким же, как вы его оставили, когда он использовался для предыдущей записи.

В вашем методе vote вы, по-видимому, меняете цвет текстового вида, когда пользователь нажимает на эту запись, но вы не сбрасываете цвет в состояние по умолчанию, когда оно повторно используется для другой записи. Таким образом, он остается неизменным, каким был цвет.

Вы должны каким-то образом отслеживать то, что записи уже проголосовали (не в viewholder или зрения, но где-то в вашей модели), а затем установить правильный цвет для каждый просмотра в вашем методе onBindViewHolder.

В принципе, вы всегда придется вручную сбросить все изменения, внесенные в представление в вашем методе onBindViewHolder.

 Смежные вопросы

  • Нет связанных вопросов^_^