Как использовать кнопку ViewPager на странице MainActivity? - PullRequest
2 голосов
/ 22 марта 2019

Как я могу использовать кнопку адаптера Viewpager в MainActivity?Я разрабатываю приложение для викторины и сравниваю значение кнопки с MainActivity.Как я могу получить доступ к кнопкам класса ViewPagerAdapter в MainActivity?

@Override
    protected void onStart() {
        super.onStart();

        Ref.child("Exam_Category").child("PRACTICE TEST").child("PREVIOUS YEAR PAPER'S").child(ct1).child(ct2).child("ENGLISH COMPREHENSION").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    for (DataSnapshot data : dataSnapshot.getChildren()) {
                        key = data.getKey().toString();


                        Ref.child("Exam_Category").child("PRACTICE TEST").child("PREVIOUS YEAR PAPER'S").child(ct1).child(ct2).child("ENGLISH COMPREHENSION").child(String.valueOf(key))
                                .addValueEventListener(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                        if (dataSnapshot.exists()) {
                                            final questions studentDetails = dataSnapshot.getValue(questions.class);
                                            list.add(studentDetails);

                                            adapter = new RecyclerViewAdapter(Previous_Yr_Quiz.this, list);

                                            viewPager.setAdapter(adapter);
                                        }
                                    }


                                    @Override
                                    public void onCancelled(@NonNull DatabaseError databaseError) {

                                    }
                                });

                    }
            }

                //total_q.setText(Question_No +" / "+key);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

Это мой адаптер ViewPager

public  class RecyclerViewAdapter extends PagerAdapter {


    // Declare Variables
    Context context;
    LayoutInflater inflater;
    public List<questions> list;




    public RecyclerViewAdapter(Context context, List<questions> TempList) {
        this.context = context;

        this.list = TempList;
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((RelativeLayout) object);
    }

    @Override
    public  Object instantiateItem(ViewGroup container, final int position) {

        // Declare Variables
        TextView question;
        final Button option1,option2,option3,option4;


        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.quiz_layout_listview, container,
                false);



        // Locate the TextViews in viewpager_item.xml
        question = (TextView)itemView.findViewById(R.id.question);
        option1 = (Button) itemView.findViewById(R.id.optiona);
        option2 = (Button) itemView.findViewById(R.id.optionb);
        option3 = (Button) itemView.findViewById(R.id.optionc);
        option4 = (Button) itemView.findViewById(R.id.optiond);





        // Capture position and set to the TextViews
        questions studentDetails = list.get(position);
        question.setText(studentDetails.getQuestion());
        option1.setText(studentDetails.getOption1());
        option1.setId(position);
        option2.setText(studentDetails.getOption2());
        option3.setText(studentDetails.getOption3());
        option4.setText(studentDetails.getOption4());



        option1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                option1.setBackgroundResource(R.drawable.wrong);

            }
        });

        ((ViewPager) container).addView(itemView);

        return itemView;


    }






    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // Remove viewpager_item.xml from ViewPager
        ((ViewPager) container).removeView((RelativeLayout) object);



    }

    private int getItem(int i) {
        return list.size();

    }



}

Как можно использовать параметры кнопок A, B, C, D OnClick в MainActivity, потому что ясравнить значение кнопки с кнопками A, B, C, D ....

1 Ответ

0 голосов
/ 24 марта 2019

У вас есть два варианта:

1) Создайте кнопки в качестве членов класса и получите к ним доступ из своей деятельности с помощью методов get.

2) Напишите интерфейс, который будет иметь методы обратного вызова, чтобы вы знали, какая кнопка нажата. Когда вы пишете интерфейс, вы передаете его как параметр конструктора или с помощью метода set. Что-то вроде:

interface QuizListener {
  void answered(Button whichButton);
}

...
[RecyclerViewAdapter.java]
public RecyclerViewAdapter(Context context, List<questions> TempList, QuizListener quizListener) {
  this.context = context;
  this.list = TempList;
  this.quizListener = quizListener;
}

...

option1.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    if (quizListener != null) {
      quizListener.answered(option1);
    }
    option1.setBackgroundResource(R.drawable.wrong);
  }
});


...