【问题标题】:RecyclerView with multiple buttons OnClickListener具有多个按钮 OnClickListener 的 RecyclerView
【发布时间】:2019-02-05 08:48:39
【问题描述】:

我正在设计一个测验应用程序。我的 RecycleView 包含一个 TextField(用于问题)和四个按钮(用于答案)。用户必须选择任何一个按钮。我想为所有按钮添加 OnClickListener,以便我可以跟踪特定问题,即用户单击了哪些按钮。

activity_play_quiz.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".PlayQuiz">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_play_quiz" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_dialog_email" />

    <android.support.v7.widget.RecyclerView

        android:id="@+id/recycler_view_quiz_display"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        >

    </android.support.v7.widget.RecyclerView>

</android.support.design.widget.CoordinatorLayout>

这是我的 recyclerview 自定义适配器

public class QuizAdapter extends 
        RecyclerView.Adapter<QuizAdapter.CustomViewHolder> {

    private List<DmQuiz> questionList;
    private Context context;

    public QuizAdapter(List<DmQuiz> questionList, Context context) {
        this.questionList = questionList;
        this.context = context;
    }

    @NonNull
    @Override
    public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup 
            parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.quiz_display_format,parent,false);
        return new CustomViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull CustomViewHolder holder, int position) {
        DmQuiz questionsList = questionList.get(position);
        holder.tvquestion.getLayoutParams().width =
                LinearLayout.LayoutParams.WRAP_CONTENT;
        holder.tvquestion.setText(questionsList.getQuestion());
        holder.optA.setText(questionsList.getOpta());
        holder.optB.setText(questionsList.getOptb());
        holder.optC.setText(questionsList.getOptc());
        holder.optD.setText(questionsList.getOptd());

    }

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

    public class CustomViewHolder extends RecyclerView.ViewHolder {
        TextView tvquestion;
        Button optA,optB,optC,optD;



        public CustomViewHolder(View itemView) {
            super(itemView);
            tvquestion = (TextView)itemView
                    .findViewById(R.id.tvQuestion);
            optA = (Button)itemView.findViewById(R.id.button1);
            optB = (Button)itemView.findViewById(R.id.button2);
            optC = (Button)itemView.findViewById(R.id.button3);
            optD = (Button)itemView.findViewById(R.id.button4);


        }
    }

    public QuizAdapter(List<DmQuiz> questionList) {
        this.questionList = questionList;
    }

    public void setSearchOperation(List<DmQuiz> newList) {
        questionList = new ArrayList<>();
        questionList.addAll(newList);
        notifyDataSetChanged();
    }

}

这是我使用 RecyclerView 的 PlayQuiz.java 活动

public class PlayQuiz extends AppCompatActivity {

    private RecyclerView recyclerView;
    DataBaseHelper database;
    private List<DmQuiz> quizList;
    private QuizAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play_quiz);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        recyclerView = (RecyclerView) 
                findViewById(R.id.recycler_view_quiz_display);
        database = new DataBaseHelper(PlayQuiz.this);
        quizList = database.fillObjQuesList();
        adapter = new QuizAdapter(quizList);
        RecyclerView.LayoutManager mLayoutManager = new 
                LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(adapter);

    }

}

【问题讨论】:

  • 您的问题是什么?你面临什么问题?

标签: android android-recyclerview


【解决方案1】:

在你 PlayQuiz 活动中实现 View.OnClickListener 如下

public class PlayQuiz extends AppCompatActivity  implements View.OnClickListener{

@Override
public void onClick(View v) {
    Intent intent;
    switch (v.getId()) {
        case R.id.button1:
            // selected question 1
            break;
        case R.id.button1:
            // selected question 2
            break;
        case R.id.button1:
            // selected question 3
            break;
        case R.id.button1:
            // selected question 4
            break;
    }
}
}

在你看来Holder添加如下

public CustomViewHolder(View itemView) {
    super(itemView);
    tvquestion = (TextView)itemView.findViewById(R.id.tvQuestion);
    optA = (Button)itemView.findViewById(R.id.button1);
    optB = (Button)itemView.findViewById(R.id.button2);
    optC = (Button)itemView.findViewById(R.id.button3);
    optD = (Button)itemView.findViewById(R.id.button4);
    optA.setOnClickListener( itemView.getContext() );
    optB.setOnClickListener( itemView.getContext() );
    optC.setOnClickListener( itemView.getContext() );
    optD.setOnClickListener( itemView.getContext() );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多