关于适配器的夫妇问题

时间:2016-04-03 23:12:04

标签: java android arraylist

public class AdapterQuestion extends RecyclerView.Adapter<AdapterQuestion.ViewQuestion>{
private LayoutInflater mLayoutInflater;
//this is an arrayList of questionData objects
private ArrayList<QuestionData> data =new ArrayList<>();
//Created the layoutInflator
public AdapterQuestion(Context context){
    //get from context
    mLayoutInflater=LayoutInflater.from(context);

}
public void setBloglist(ArrayList<QuestionData> data){
    this.data =data;
    notifyItemRangeChanged(0, data.size());
    System.out.print("Size of the array "+data.size());
}
@Override
public ViewQuestion onCreateViewHolder(ViewGroup parent, int viewType) {
    //inflates the customQuestion view or converts it to java code
    View view= mLayoutInflater.inflate(R.layout.customquestion, null);
    //We now want to convert the View into a ViewQuestion, view Question takes
    //a view so we pass the view into view question and then return it.

    ViewQuestion holder=new ViewQuestion(view);
    return holder;
}
//ViewGroup parent and ViewType are not being assigned.
@Override
public void onBindViewHolder(ViewQuestion holder, int position) {
    //here we need to bind the data to our view, there is currently no Data!
    //We need to get the data from our JSON
    //Parameters is a ViewHolder and a Position
    QuestionData currentBlog= data.get(position);
    holder.answerText.setText(currentBlog.getMtext());
    holder.answerId.setText(currentBlog.getId());
    holder.mVotes.setText(currentBlog.getVotes());
    holder.mLikeButton.setTag(currentBlog);
}

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

public class ViewQuestion extends RecyclerView.ViewHolder{
    //once we create it once the reclycer view will automatically recycle it
    private TextView answerText;
    private TextView answerId;
    private TextView mVotes;
    private LikeButton mLikeButton;

    public ViewQuestion (View itemView){
        super(itemView);
        //here we are finding the views by their ID
        answerText=(TextView)itemView.findViewById(R.id.answerText);
        answerId=(TextView)itemView.findViewById(R.id.answerId);
        mVotes=(TextView)itemView.findViewById(R.id.VoteTextView);
        mLikeButton=(LikeButton)itemView.findViewById(R.id.heart_buttons);

        mLikeButton.setOnLikeListener(new OnLikeListener() {
            @Override
            public void liked(LikeButton likeButton) {
                Voting vote = new Voting();
                vote.onUpVote(convertToString(),getAdapterPosition(),ViewQuestion.this);
                  System.out.print("Adapter      Position"+getAdapterPosition());
            }
            @Override
            public void unLiked(LikeButton likeButton) {
                Voting onDown=new Voting();
                onDown.onDownVote(convertToString(), getAdapterPosition(), ViewQuestion.this);

            }
        });

    }
    public String getVoteView(){
        String voteView=mVotes.getText().toString();
        return voteView;
    }
    public String convertToString(){
        String converted=answerId.getText().toString();
        return converted;
    }
    public int convertToInt(){
        String converted=answerId.getText().toString();
        int ConvertedInt=Integer.parseInt(converted);
        return ConvertedInt;
    }
}
}

1.首先,为什么我们将RecyclerView.Adapter扩展为arrayList? 2。public void setBloglist(ArrayList<QuestionData> data){ this.data =data; notifyItemRangeChanged(0, data.size()); System.out.print("Size of the array "+data.size()); } 在上面的方法中,我们传入一个ArrayList,我们将Arraylist的数据设置为传入的数据,但是我们不必在ViewHolder中设置数据吗? 3. super(itemView); Why does the ViewHolder extend super? isnt that itself?

1 个答案:

答案 0 :(得分:0)

  1. 它不是ArrayList,它是泛型

  2. 此关键字引用当前对象,因此我们设置数据的值 AdapterQuestion的对象中的实例变量,作为方法争论传递的值

  3. ViewHolder不会扩展名为super的类,但您的ViewQuestion类扩展RecyclerView.ViewHolder类,super(itemView);用于调用RecyclerView.ViewHolder构造函数< / p>