在返回按钮被按下时,我想从适配器中返回到前一个活动。

huangapple 未分类评论48阅读模式
英文:

on back pressed I want to go previous activity from adapter

问题

public class TestFragment extends Fragment {
    // ... (rest of the code)

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_test, container, false);
        // ... (rest of the code)

        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(getContext(), finalresult.class);
                    intent.putExtra("score", score);
                    intent.putExtra("questions", totalItem);
                    startActivity(intent);
                } else {
                    Toast.makeText(getContext(), "Answer all the questions", Toast.LENGTH_SHORT).show();
                }
            }
        });

        return view;
    }

    // ... (rest of the code)
}
public class QuestionLayoutRecyclerAdapter extends RecyclerView.Adapter<QuestionLayoutRecyclerAdapter.FlagViewHolder> {
    // ... (rest of the code)

    @NonNull
    @Override
    public FlagViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.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(R.drawable.right2);
        } else {
            holder.ivFlag.setImageResource(R.drawable.white2);
        }
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onItemClickListner.onClick(holder.getAdapterPosition());
            }
        });
    }

    // ... (rest of the code)
}

Please note that I have made necessary changes in the code snippets to make them syntactically correct and relevant to your requirements.

英文:

I have an activity which is connected with an adapter. In the activity, I include adapter layout. when I click on the button than adapter layout open but when I press back button in adapter layout than automatically reached main activity. I want that when I press back button in adapter than go to previous activity.

activity code is below

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 &lt; mcqQuestion &gt; quesList = new ArrayList &lt; &gt;();
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(&quot;tax&quot;).child(&quot;Questions&quot;);
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(&quot;optA&quot;);
			setButtonColor();
			btnA.setBackgroundResource(R.color.sky_blue);
		}
	});
	btnB.setOnClickListener(new View.OnClickListener() {@Override
		public void onClick(View v) {
			quesList.get(listItem).setSelAnswer(&quot;optB&quot;);
			setButtonColor();
			btnB.setBackgroundResource(R.color.sky_blue);
		}
	});
	btnC.setOnClickListener(new View.OnClickListener() {@Override
		public void onClick(View v) {
			quesList.get(listItem).setSelAnswer(&quot;optC&quot;);
			setButtonColor();
			btnC.setBackgroundResource(R.color.sky_blue);
		}
	});
	btnD.setOnClickListener(new View.OnClickListener() {@Override
		public void onClick(View v) {
			quesList.get(listItem).setSelAnswer(&quot;optD&quot;);
			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(&quot;SetTextI18n&quot;)@Override
		public void onClick(View v) {
			for (int i = 0; i &lt; totalItem; i++) {
				if (quesList.get(i).getSelAnswer().equals(&quot;none&quot;)) {
					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(&quot;score&quot;, score);
				intent.putExtra(&quot;questions&quot;, totalItem);
				startActivity(intent);
			} else {
				Toast.makeText(this, &quot;Answer all the questions&quot;, 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 &gt;= 0 &amp;&amp; listItem &lt; 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(&quot;qText&quot;).getValue();
				String optA = (String) messageSnapshot.child(&quot;optA&quot;).getValue();
				String optB = (String) messageSnapshot.child(&quot;optB&quot;).getValue();
				String optC = (String) messageSnapshot.child(&quot;optC&quot;).getValue();
				String optD = (String) messageSnapshot.child(&quot;optD&quot;).getValue();
				String answer = (String) messageSnapshot.child(&quot;answer&quot;).getValue();
				quesList.add(new mcqQuestion(qtext, optA, optB, optC, optD, answer, &quot;none&quot;, false));
				Log.d(&quot;TOTAL ITEM&quot;, 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 &lt; 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 &quot;optA&quot;:
		btnA.setBackgroundResource(R.color.sky_blue);
		break;
	case &quot;optB&quot;:
		btnB.setBackgroundResource(R.color.sky_blue);
		break;
	case &quot;optC&quot;:
		btnC.setBackgroundResource(R.color.sky_blue);
		break;
	case &quot;optD&quot;:
		btnD.setBackgroundResource(R.color.sky_blue);
		break;
	default:
		setButtonColor();
		break;
	}
}
private void displayPrevQues() {
	btnNext.setVisibility(View.VISIBLE);
	if (listItem &gt; 0 &amp;&amp; listItem &lt; totalItem) {
		listItem--;
		makeAllDisplay();
	} else {
		Toast.makeText(this, &quot;Cannot GO back!!&quot;, Toast.LENGTH_SHORT).show();
	}
}
}

and the adapter code is below

public class QuestionLayoutRecyclerAdapter extends RecyclerView.Adapter &lt; QuestionLayoutRecyclerAdapter.FlagViewHolder &gt; {

private ArrayList &lt; mcqQuestion &gt; 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 &lt; mcqQuestion &gt; 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(&quot;ResourceAsColor&quot;)@Override
public void onBindViewHolder(@NonNull final FlagViewHolder holder, int position) {
	mcqQuestion question_id = quesList.get(position);
	holder.tvQuestionNumber.setText(&quot;Question &quot; + (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 &lt; mcqQuestion &gt; quesList;
	
	public FlagViewHolder(@NonNull View itemView, ArrayList &lt; mcqQuestion &gt; 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();
	}
}
}

答案1

得分: 0

尝试这样做:

    @Override
    public void onBackPressed()
    {
        Intent intent = new Intent(this, 想要前往的活动类.class);
        startActivity(intent);
    }
英文:

Try this

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

答案2

得分: 0

根据您的代码,您并没有导航到另一个屏幕,您只是在更改可见性。在按返回键时,您可以检查当前显示的视图,并进行相应处理。

@Override
public void onBackPressed() {
    if (findViewById(R.id.your_view).getVisibility() == View.VISIBLE) {
        // 改变可见性
        rvQuesLayout.setVisibility(View.VISIBLE);
        llQuestionAll.setVisibility(View.GONE);
        // 撤销您在makeAllDisplay()方法中所做的更改
    } else {
        super.onBackPressed();
    }
}
英文:

As per you code, you are not navigation to another screen you are only changing the Visibility. On back press, you can check which view is currently displaying and handle accordingly.

@Override
public void onBackPressed() {
if (findViewById(R.id.your_view).visibility == View.Visible) {
    //change your visibility
      rvQuesLayout.setVisibility(View.VISIBLE);
     llQuestionAll.setVisibility(View.GONE);
    //reverse the things you did in makeAllDisplay() method
} else {
    super.onBackPressed();
}

}

huangapple
  • 本文由 发表于 2020年5月4日 13:46:50
  • 转载请务必保留本文链接:https://java.coder-hub.com/61585859.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定