java - 按下背面按钮我想从适配器转到上一个 Activity

标签 java android android-adapter

我有一个与适配器连接的 Activity 。在 Activity 中,我包括适配器布局。当我单击按钮时,适配器布局会打开,但是当我按适配器布局中的后退按钮时,会自动到达主要 Activity 。我希望当我按下适配器中的后退按钮时,而不是转到上一个 Activity 。

Activity 代码如下

public class TestFragment extends Fragment {
private Button btnA,
btnB,
btnC,
btnD,
btnSubmit,
btnNext,
btnPrev,
btnFlag;
private TextView tvQuestion,
tvLayout;
private int totalItem;
private int listItem = 0;
private ArrayList < mcqQuestion > quesList = new ArrayList < >();
private int score = 0;
private boolean isLoading = true;
private RelativeLayout rlMcqProgress;
private FirebaseAuth mAuth;
private boolean allAnswered = false;
private RecyclerView rvQuesLayout;
private RecyclerView.LayoutManager layoutManager;
private QuestionLayoutRecyclerAdapter adapter;
private LinearLayout llQuestionAll;
private FirebaseDatabase database = FirebaseDatabase.getInstance();
private DatabaseReference myRef = database.getReference("tax").child("Questions");
public TestFragment() {
    // Required empty public constructor
}@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_test, container, false);
    btnA = view.findViewById(R.id.btn_mcq_A);
    btnB = view.findViewById(R.id.btn_mcq_B);
    btnC = view.findViewById(R.id.btn_mcq_C);
    btnD = view.findViewById(R.id.btn_mcq_D);
    btnSubmit = view.findViewById(R.id.btn_mcq_submit);
    btnNext = view.findViewById(R.id.btn_mcq_next);
    btnPrev = view.findViewById(R.id.btn_mcq_prev);
    btnFlag = view.findViewById(R.id.btn_mcq_flag);
    tvQuestion = view.findViewById(R.id.tv_mcq_question);
    tvLayout = view.findViewById(R.id.tv_mcq_question_layout);
    rvQuesLayout = view.findViewById(R.id.rv_layout_question_test);
    rlMcqProgress = view.findViewById(R.id.rl_mcq_progress);
    rlMcqProgress.setVisibility(View.VISIBLE);
    llQuestionAll = view.findViewById(R.id.ll_test_all);
    mAuth = FirebaseAuth.getInstance();
    getFData();
    btnA.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            quesList.get(listItem).setSelAnswer("optA");
            setButtonColor();
            btnA.setBackgroundResource(R.color.sky_blue);
        }
    });
    btnB.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            quesList.get(listItem).setSelAnswer("optB");
            setButtonColor();
            btnB.setBackgroundResource(R.color.sky_blue);
        }
    });
    btnC.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            quesList.get(listItem).setSelAnswer("optC");
            setButtonColor();
            btnC.setBackgroundResource(R.color.sky_blue);
        }
    });
    btnD.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            quesList.get(listItem).setSelAnswer("optD");
            setButtonColor();
            btnD.setBackgroundResource(R.color.sky_blue);
        }


});
    btnFlag.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            setFlagValue();
            setFlagColor();
        }
    });
    tvLayout.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            adapter.notifyDataSetChanged();
            if (rvQuesLayout.getVisibility() == View.GONE || rvQuesLayout.getVisibility() == View.INVISIBLE) {
                rvQuesLayout.setVisibility(View.VISIBLE);
                llQuestionAll.setVisibility(View.GONE);
            } else {
                rvQuesLayout.setVisibility(View.GONE);
                llQuestionAll.setVisibility(View.VISIBLE);
            }
        }
    });
    btnNext.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            displayNextQues();
        }
    });
    btnPrev.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            displayPrevQues();
        }
    });
    btnSubmit.setOnClickListener(new View.OnClickListener() {@SuppressLint("SetTextI18n")@Override
        public void onClick(View v) {
            for (int i = 0; i < totalItem; i++) {
                if (quesList.get(i).getSelAnswer().equals("none")) {
                    allAnswered = false;
                    score++;
                    break;
                } else {
                    if (quesList.get(i).getSelAnswer().equals(quesList.get(i).getAnswer())) {
                        score++;
                    }
                    allAnswered = true;
                }
            }
            if (allAnswered) {
                Intent intent = new Intent(this, finalresult.class);
                intent.putExtra("score", score);
                intent.putExtra("questions", totalItem);
                startActivity(intent);
            } else {
                Toast.makeText(this, "Answer all the questions", Toast.LENGTH_SHORT).show();
            }

        }
    });
    return view;
}
private void makeRecyclerView() {
    layoutManager = new LinearLayoutManager(this);
    //rvQuesLayout.setHasFixedSize(true);
    rvQuesLayout.setLayoutManager(layoutManager);
    adapter = new QuestionLayoutRecyclerAdapter(quesList);
    rvQuesLayout.setAdapter(adapter);
    adapter.setOnItemClickListner(new QuestionLayoutRecyclerAdapter.onItemClickListner() {@Override
        public void onClick(int pos) {
            listItem = pos;
            if (listItem >= 0 && listItem < totalItem) {
                makeAllDisplay();
                rvQuesLayout.setVisibility(View.GONE);
                llQuestionAll.setVisibility(View.VISIBLE);
            }
        }
    });
}
private void setDisplay(int item) {
    btnA.setText(quesList.get(item).getOptA());
    btnB.setText(quesList.get(item).getOptB());
    btnC.setText(quesList.get(item).getOptC());
    btnD.setText(quesList.get(item).getOptD());
    tvQuestion.setText(quesList.get(item).getQuestion());

}
private void getFData() {
    myRef.addValueEventListener(new ValueEventListener() {@Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
                String qtext = (String) messageSnapshot.child("qText").getValue();
                String optA = (String) messageSnapshot.child("optA").getValue();
                String optB = (String) messageSnapshot.child("optB").getValue();
                String optC = (String) messageSnapshot.child("optC").getValue();
                String optD = (String) messageSnapshot.child("optD").getValue();
                String answer = (String) messageSnapshot.child("answer").getValue();
                quesList.add(new mcqQuestion(qtext, optA, optB, optC, optD, answer, "none", false));
                Log.d("TOTAL ITEM", String.valueOf(quesList.size()));

            }
            totalItem = quesList.size();
            isLoading = false;
            if (!isLoading) {
                setDisplay(listItem);
                rlMcqProgress.setVisibility(View.GONE);
                tvLayout.setVisibility(View.VISIBLE);
            }
            makeRecyclerView();
        }@Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

}
        });
    }

private void setFlagValue() {
    if (quesList.get(listItem).isFlag()) {
        quesList.get(listItem).setFlag(false);
    } else {
        quesList.get(listItem).setFlag(true);
    }
}
private void setFlagColor() {
    if (quesList.get(listItem).isFlag()) {
        btnFlag.setBackgroundColor(ContextCompat.getColor(Objects.requireNonNull(this), R.color.black));
        btnFlag.setTextColor(ContextCompat.getColor(Objects.requireNonNull(this), R.color.grey));
    } else {
        btnFlag.setBackgroundColor(ContextCompat.getColor(Objects.requireNonNull(this), R.color.grey_light));
        btnFlag.setTextColor(ContextCompat.getColor(Objects.requireNonNull(this), R.color.grey));
    }
}
private void setButtonColor() {
    btnA.setBackgroundResource(R.color.grey_light);
    btnB.setBackgroundResource(R.color.grey_light);
    btnC.setBackgroundResource(R.color.grey_light);
    btnD.setBackgroundResource(R.color.grey_light);
}
private void displayNextQues() {
    if (listItem < totalItem - 1) {
        listItem++;
        makeAllDisplay();
    } else {
        btnNext.setVisibility(View.GONE);
        btnSubmit.setVisibility(View.VISIBLE);
    }
}
private void makeAllDisplay() {
    setDisplay(listItem);
    setButtonColor();
    setFlagColor();
    switch (quesList.get(listItem).getSelAnswer()) {
    case "optA":
        btnA.setBackgroundResource(R.color.sky_blue);
        break;
    case "optB":
        btnB.setBackgroundResource(R.color.sky_blue);
        break;
    case "optC":
        btnC.setBackgroundResource(R.color.sky_blue);
        break;
    case "optD":
        btnD.setBackgroundResource(R.color.sky_blue);
        break;
    default:
        setButtonColor();
        break;
    }
}
private void displayPrevQues() {
    btnNext.setVisibility(View.VISIBLE);
    if (listItem > 0 && listItem < totalItem) {
        listItem--;
        makeAllDisplay();
    } else {
        Toast.makeText(this, "Cannot GO back!!", Toast.LENGTH_SHORT).show();
    }
}
}

适配器代码如下

public class QuestionLayoutRecyclerAdapter extends RecyclerView.Adapter < QuestionLayoutRecyclerAdapter.FlagViewHolder > {

private ArrayList < mcqQuestion > quesList;
private onItemClickListner onItemClickListner;

public void setOnItemClickListner(QuestionLayoutRecyclerAdapter.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

public interface onItemClickListner {
    void onClick(int pos); //pass your object types.
}

public QuestionLayoutRecyclerAdapter(ArrayList < mcqQuestion > quesList) {
    this.quesList = quesList;
}
@NonNull@Override
public FlagViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(layout.question_layout, parent, false);
    FlagViewHolder flagViewHolder = new FlagViewHolder(view, quesList);
    return flagViewHolder;
}

@SuppressLint("ResourceAsColor")@Override
public void onBindViewHolder(@NonNull final FlagViewHolder holder, int position) {
    mcqQuestion question_id = quesList.get(position);
    holder.tvQuestionNumber.setText("Question " + (position + 1));
    if (question_id.isFlag()) {
        holder.ivFlag.setImageResource(drawable.right2);
    } else {
        holder.ivFlag.setImageResource(drawable.white2);
    }
    holder.itemView.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {
            onItemClickListner.onClick(holder.getAdapterPosition());
        }
    });
}

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

public static class FlagViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    ImageView ivFlag;
    TextView tvQuestionNumber;
    ArrayList < mcqQuestion > quesList;

    public FlagViewHolder(@NonNull View itemView, ArrayList < mcqQuestion > quesList) {
        super(itemView);
        ivFlag = itemView.findViewById(id.iv_layout_flag);
        tvQuestionNumber = itemView.findViewById(id.tv_layout_question_number);
        itemView.setOnClickListener(this);
        this.quesList = quesList;
    }
    @Override
    public void onClick(View v) {
        int quesClick = getAdapterPosition();
    }
}
}

最佳答案

试试这个

@Override
public void onBackPressed()
{
    Intent intent = new Intent(this, ActivityWhereYouWantToGo.class);
    startActivity(intent);
}

关于java - 按下背面按钮我想从适配器转到上一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61585859/

相关文章:

java - 滑动时加速列表滚动 - Android。如何?

android - 如何使用 Espresso 在特定位置测试适配器中的项目

java - 如何将电话联系人号码与 Firebase 注册号码进行比较?

android - 单击时可以获取一行的屏幕位置吗?

java - 在抛出异常()或addGlobalError()之前保存变量

java - ProcessBuilder 的问题

android - APT : error: attribute 'package' in tag is not a valid Java package name: 'com.mypackage.name_.app'

android - 如何仅在字符串中的整数之间放置空格

java - 从 View 访问 Controller 中的方法

java - 服务器应用程序的 C++ 与 Java