Android 如何访问片段内单击的RecyclerView项位置?
我有一个Android 如何访问片段内单击的RecyclerView项位置?,android,android-fragments,android-recyclerview,Android,Android Fragments,Android Recyclerview,我有一个recyclerView,显示用户完成的练习 在我的“adapter”类中,我有一个方法changeIndex(),用于将我的RecyclerView中单击项目的背景更改为绿色 问题是我想从片段内部调用changeIndex()方法,但我不知道访问片段中单击的RecyclerView项位置的正确方法 如何做到这一点 适配器 public class CompletedExercisesListAdapter2 extends RecyclerView.Adapter { p
recyclerView
,显示用户完成的练习
在我的“adapter”类中,我有一个方法changeIndex()
,用于将我的RecyclerView
中单击项目的背景更改为绿色
问题是我想从片段内部调用changeIndex()
方法,但我不知道访问片段中单击的RecyclerView项位置的正确方法
如何做到这一点
适配器
public class CompletedExercisesListAdapter2 extends RecyclerView.Adapter {
private List<Log_Entries> allCompletedExercises = new ArrayList<>();
private int row_index = -1;
private OnItemClickListener listener;
int presentPosition;
private ItemClick itemClick;
public void CompletedExercisesListAdapter2(ItemClick itemClick) {
this.itemClick=itemClick;
}
//STAYS
public void setExercises(List<Log_Entries> exercises) {
this.allCompletedExercises = exercises;
notifyDataSetChanged();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view;
if (viewType == 0) {
view = layoutInflater.inflate(R.layout.new_completed_exercise_item, parent, false);
return new ViewHolderOne(view);
}
view = layoutInflater.inflate(R.layout.completed_exercise_item, parent, false);
return new ViewHolderTwo(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
presentPosition = position;
if (getItemViewType(position) == 0) {
ViewHolderOne viewHolderOne = (ViewHolderOne) holder;
if (row_index == position) {
viewHolderOne.relativeLayout.setBackgroundColor(Color.parseColor("#567845"));
} else {
viewHolderOne.relativeLayout.setBackgroundResource(R.color.dark_grey);
}
viewHolderOne.textViewExerciseName.setText(String.valueOf(allCompletedExercises.get(position).getChildExerciseName()));
viewHolderOne.textViewSetNumber.setText(String.valueOf(allCompletedExercises.get(position).getSet_number()));
viewHolderOne.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position).getTotal_weight_lifted()));
viewHolderOne.textViewReps.setText(String.valueOf(allCompletedExercises.get(position).getReps()));
} else if (getItemViewType(position) == 1) {
// bindViewHolder2
ViewHolderTwo viewHolderTwo = (ViewHolderTwo) holder;
if (row_index == position) {
viewHolderTwo.relativeLayout.setBackgroundColor(Color.parseColor("#567845"));
} else {
viewHolderTwo.relativeLayout.setBackgroundResource(R.color.dark_grey);
}
viewHolderTwo.textViewSetNumber.setText(String.valueOf(allCompletedExercises.get(position).getSet_number()));
viewHolderTwo.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position).getTotal_weight_lifted()));
viewHolderTwo.textViewReps.setText(String.valueOf(allCompletedExercises.get(position).getReps()));
}
}
@Override
public int getItemCount() {
return allCompletedExercises.size();
}
@Override
public int getItemViewType(int position) {
// if list is sorted chronologically
if (position == 0) {
return 0;
}
if (allCompletedExercises.get(position).getChildExerciseName().equals(allCompletedExercises.get(position - 1).getChildExerciseName())) {
return 1;
} else {
return 0;
}
}
class ViewHolderOne extends RecyclerView.ViewHolder {
private TextView textViewExerciseName;
private TextView textViewSetNumber;
private TextView textViewWeight;
private TextView textViewReps;
private RelativeLayout relativeLayout;
public ViewHolderOne(@NonNull View itemView) {
super(itemView);
textViewExerciseName = itemView.findViewById(R.id.textView_ExerciseName3);
textViewSetNumber = itemView.findViewById(R.id.textView_Set_Number56);
textViewWeight = itemView.findViewById(R.id.textView_weight78);
textViewReps = itemView.findViewById(R.id.textView_repss0);
relativeLayout = (RelativeLayout) itemView.findViewById(R.id.exercise_item_relative);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
itemClick.clickItemPosition(getAdapterPosition());
if (listener != null && position != RecyclerView.NO_POSITION) {
listener.onItemClick(allCompletedExercises.get(position));
}
}
});
}
}
class ViewHolderTwo extends RecyclerView.ViewHolder {
private TextView textViewSetNumber;
private TextView textViewWeight;
private TextView textViewReps;
private RelativeLayout relativeLayout;
public ViewHolderTwo(@NonNull View itemView) {
super(itemView);
textViewSetNumber = itemView.findViewById(R.id.textView_Set_Number);
textViewWeight = itemView.findViewById(R.id.textView_weight);
textViewReps = itemView.findViewById(R.id.textView_repss);
relativeLayout = (RelativeLayout) itemView.findViewById(R.id.exercise_item_rel);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
itemClick.clickItemPosition(getAdapterPosition());
if (listener != null && position != RecyclerView.NO_POSITION) {
listener.onItemClick(allCompletedExercises.get(position));
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(Log_Entries exercises);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public void changeIndex(int rowIndex){
this.row_index = rowIndex;
notifyDataSetChanged();
}
public interface ItemClick {
public void clickItemPosition(int position);
}
}
公共类CompletedExercisesListAdapter2扩展了RecyclerView.Adapter{
private List allCompletedExercises=new ArrayList();
private int row_index=-1;
私人监听;
int当前位置;
私人物品点击物品点击;
public void CompletedExercisesListAdapter2(项目单击项目单击){
this.itemClick=itemClick;
}
//停留
公开练习(列表练习){
this.allCompletedExercises=练习;
notifyDataSetChanged();
}
@非空
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
LayoutInflater LayoutInflater=LayoutInflater.from(parent.getContext());
视图;
如果(viewType==0){
视图=布局更平坦。充气(R.layout.new\u completed\u exercise\u item,parent,false);
返回新的ViewHolderOne(视图);
}
视图=布局更平坦。充气(R.layout.completed\u exercise\u item,parent,false);
返回新的ViewHolderTwo(视图);
}
@凌驾
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder,int位置){
当前位置=位置;
如果(getItemViewType(位置)==0){
ViewHolderOne ViewHolderOne=(ViewHolderOne)支架;
if(行索引==位置){
viewHolderOne.relativeLayout.setBackgroundColor(Color.parseColor(“#567845”);
}否则{
viewHolderOne.relativeLayout.setBackgroundResource(R.颜色.深灰色);
}
viewHolderOne.textViewExerciseName.setText(String.valueOf(allCompletedExercises.get(position.getChildExerciseName());
viewHolderOne.textViewSetNumber.setText(String.valueOf(allCompletedExercises.get(position.getSet_number()));
viewHolderOne.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position.getTotal_weight_lifted());
viewHolderOne.textViewReps.setText(String.valueOf(allCompletedExercises.get(position.getReps()));
}else if(getItemViewType(position)==1){
//bindViewHolder2
ViewHolderTwo ViewHolderTwo=(ViewHolderTwo)支架;
if(行索引==位置){
viewHolderTwo.relativeLayout.setBackgroundColor(Color.parseColor(“#567845”);
}否则{
VIEWHOLDERTW.相对年轻人.挫折背景资源(R.颜色.深灰色);
}
viewHolderTwo.textViewSetNumber.setText(String.valueOf(AllCompletedExecutions.get(position.getSet_number()));
viewHolderTwo.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position.getTotal_weight_lifted());
viewHolderTwo.textViewReps.setText(String.valueOf(allCompletedExecutions.get(position.getReps()));
}
}
@凌驾
public int getItemCount(){
返回所有已完成的练习。size();
}
@凌驾
public int getItemViewType(int位置){
//如果列表按时间顺序排序
如果(位置==0){
返回0;
}
if(allCompletedExercises.get(position).getChildExerciseName().equals(allCompletedExercises.get(position-1).getChildExerciseName()){
返回1;
}否则{
返回0;
}
}
类ViewHolderOne扩展了RecyclerView.ViewHolder{
私有TextView textViewExerciseName;
私有TextView textViewSetNumber;
私有文本视图文本视图权重;
私有文本视图文本视图代表;
私人亲戚;
public ViewHolderOne(@NonNull View itemView){
超级(项目视图);
textViewExerciseName=itemView.findViewById(R.id.textView\u ExerciseName3);
textViewSetNumber=itemView.findViewById(R.id.textView\u Set\u Number56);
textViewWeight=itemView.findViewById(R.id.textView\u weight 78);
textViewReps=itemView.findViewById(R.id.textView\u repss0);
relativeLayout=(relativeLayout)itemView.findViewById(R.id.exercise\u item\u relative);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
itemClick.clickItemPosition(getAdapterPosition());
if(侦听器!=null&&position!=RecyclerView.NO\u位置){
onItemClick(allCompletedExercises.get(position));
}
}
});
}
}
类ViewHolder两个扩展RecyclerView.ViewHolder{
私有TextView textViewSetNumber;
私有文本视图文本视图权重;
私有文本视图文本视图代表;
私人亲戚;
public ViewHolderTwo(@NonNull View itemView){
超级(项目视图);
textViewSetNumber=itemView.findViewById(R.id.textView\u Set\u Number);
textViewWeight=itemView.findViewById(R.id.textView\u-weight);
textViewReps=itemView.findViewById(R.id.textView\u repss);
relativeLayout=(relativeLayout)itemView.findViewById(R.id.exercise\u item\u rel);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共空间点击(Vi)
public class RecordExerciseFragment extends Fragment implements CompletedExercisesListAdapter2.ItemClick {
public static final String PARENT_EXERCISE_ID = "-999";
public static final String EXTRA_DATE = "com.example.exerciseappv4.EXTRA_DATE";
public static final String EXTRA_WEEK_DATES = "1";
public static String EXTRA_JUNCTIONID = "EXERCISE_JUNCTION_ID";
public static int workout_id = 1;
public static int set_number;
private EditText editTextWeight;
private EditText editTextReps;
private Button saveBtn;
private Button clearBtn;
private RecyclerView recyclerView;
private Button incRepsBtn;
private Button decRepsBtn;
private Button incWeightBtn;
private Button decWeightBtn;
private TextView dates;
private LogEntriesViewModel logViewModel;
private ChildExerciseViewModel childExerciseViewModel;
int current_junction_id;
String date = "NULL";
int firstExerciseID;
int parentExerciseID;
int numberOfLogEntries = 0;
int itemPosition;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.record_exercise_view, container, false);
}
public void onViewCreated(View view, Bundle savedInstanceState) {
editTextWeight = getView().findViewById(R.id.editTextWeight);
editTextReps = getView().findViewById(R.id.editTextReps);
saveBtn = getView().findViewById(R.id.save_btn);
clearBtn = getView().findViewById(R.id.clear_btn);
incRepsBtn = getView().findViewById(R.id.inc_reps);
decRepsBtn = getView().findViewById(R.id.dec_reps);
incWeightBtn = getView().findViewById(R.id.inc_weight);
decWeightBtn = getView().findViewById(R.id.dec_weight);
logViewModel = ViewModelProviders.of(this).get(LogEntriesViewModel.class);
recyclerView = getView().findViewById(R.id.completed_exercise_ListView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setHasFixedSize(true);
Intent intent = getActivity().getIntent();
if (intent.hasExtra(PARENT_EXERCISE_ID)) {
parentExerciseID = Integer.parseInt(intent.getStringExtra(PARENT_EXERCISE_ID));
}
if (intent.hasExtra(EXTRA_DATE)) {
date = intent.getStringExtra(EXTRA_DATE);
}
if (intent.hasExtra(EXTRA_JUNCTIONID)) {
current_junction_id = (intent.getIntExtra(EXTRA_JUNCTIONID, -1));
}
childExerciseViewModel = ViewModelProviders.of(this).get(ChildExerciseViewModel.class);
childExerciseViewModel.getChildExerciseIDFromparentID(parentExerciseID).observe(this, this::setChildExerciseID);
ArrayList<String> THIS_WEEK_DATES = getActivity().getIntent().getStringArrayListExtra(EXTRA_WEEK_DATES);
Log.i("JUNCTION ID", String.valueOf(current_junction_id));
final CompletedExercisesListAdapter2 adapter = new CompletedExercisesListAdapter2();
recyclerView.setAdapter(adapter);
logViewModel = ViewModelProviders.of(this).get(LogEntriesViewModel.class);
logViewModel.getAllWorkoutLogEntries(current_junction_id, THIS_WEEK_DATES).observe(this, new Observer<List<Log_Entries>>() {
@Override
public void onChanged(List<Log_Entries> exercises) {
adapter.setExercises(exercises);
numberOfLogEntries = adapter.getItemCount();
if (numberOfLogEntries > 0) {
recyclerView.smoothScrollToPosition(numberOfLogEntries - 1);
}
}
});
incWeightBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
double x;
if (!editTextWeight.getText().toString().matches("")) {
x = Double.parseDouble(editTextWeight.getText().toString());
} else {
x = 0;
}
x = x + 2.5;
String y = Double.toString(x);
editTextWeight.setText(y);
}
});
decWeightBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
double x;
if (!editTextWeight.getText().toString().matches("")) {
x = Double.parseDouble(editTextWeight.getText().toString());
} else {
x = 0;
}
x = x - 2.5;
String y = Double.toString(x);
editTextWeight.setText(y);
}
});
incRepsBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int x;
if (!editTextReps.getText().toString().matches("")) {
x = Integer.parseInt(editTextReps.getText().toString());
} else {
x = 0;
}
x = x + 1;
String y = Integer.toString(x);
editTextReps.setText(y);
}
});
decRepsBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int x;
if (!editTextReps.getText().toString().matches("")) {
x = Integer.parseInt(editTextReps.getText().toString());
} else {
x = 0;
}
x = x - 1;
String y = Integer.toString(x);
editTextReps.setText(y);
}
});
clearBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
editTextWeight.setText("0.0");
editTextReps.setText("0");
}
});
saveBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (editTextWeight.getText().toString().matches("")) {
Toast.makeText(getActivity(), "Please Enter a Weight", Toast.LENGTH_SHORT).show();
return;
}
if (editTextReps.getText().toString().matches("")) {
Toast.makeText(getActivity(), "Please Enter Reps", Toast.LENGTH_SHORT).show();
return;
}
double total_weight = Double.parseDouble(editTextWeight.getText().toString());
int reps = Integer.parseInt(editTextReps.getText().toString());
set_number = recyclerView.getAdapter().getItemCount() + 1;
if (1000 > total_weight && total_weight > 0 && 100 > reps && reps > 0) {
workout_id = WorkoutButtonsActivity.buttonClicked;
final Toast toast = Toast.makeText(getActivity(), "Added", Toast.LENGTH_SHORT);
toast.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
toast.cancel();
}
}, 500);
//save log
//CHANGE THIS, GET EXERCISE NAME FROM SPINNER
final Log_Entries logs = new Log_Entries(current_junction_id, workout_id, total_weight, set_number, reps, date, ((RecordExerciseActivity2) getActivity()).getSelectedExercise());
logViewModel.insert(logs);
adapter.notifyDataSetChanged();
} else {
Toast.makeText(getActivity(), "Values are not valid", Toast.LENGTH_SHORT).show();
return;
}
closeKeyboard();
}
});
adapter.setOnItemClickListener(new CompletedExercisesListAdapter2.OnItemClickListener() {
@Override
public void onItemClick(Log_Entries exercises) {
int logId = exercises.getLog_id();
Toast.makeText(getContext(), String.valueOf(logId), Toast.LENGTH_SHORT).show();
saveBtn.setText("Update");
clearBtn.setText("Delete");
//I WOULD LIKE TO USE THE CLICKED RECYCLER VIEW POSITION HERE
adapter.changeIndex(itemPosition);
}
});
}
private void closeKeyboard() {
View view = getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
private void setChildExerciseID(int childExerciseID) {
firstExerciseID = childExerciseID;
}
@Override
public void clickItemPosition(int position) {
itemPosition = position;
}
}
/////
public interface ItemClick {
public void clickItemPosition(int position);
}
public class RecordExerciseFragment extends Fragment implements ItemClick {
@Override
public void clickItemPosition(int position) {
// perform your action here
}
}
final CompletedExercisesListAdapter2 adapter = new CompletedExercisesListAdapter2(this);
recyclerView.setAdapter(adapter);
private ItemClick itemClick;
public void CompletedExercisesListAdapter2(ItemClick itemClick) {
this.itemClick=itemClick;
}
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
itemClick.clickItemPosition(getAdapterPosition());
if (listener != null && position != RecyclerView.NO_POSITION) {
listener.onItemClick(allCompletedExercises.get(position));
}
}
});
public class TheActivity extends AppCompatActivity {
public CompletedExercisesListAdapter2 exerciseAdapter;
public RecyclerView rv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_the);
rv = findViewById(R.id.your_rc);
exerciseAdapter = new CompletedExercisesListAdapter2();
rv.setAdapter(exerciseAdapter);
}
}
public class RecordExerciseFragment extends Fragment implements RecyclerView.OnItemTouchListener{
RecyclerView rv;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(getActivity() != null){ // Your activity.
TheActivity connectedActivity = (TheActivity) getActivity();
rv = connectedActivity.rv;
rv.addOnItemTouchListener(this);
}
}
@Override
public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
int action = e.getAction() & MotionEvent.ACTION_MASK;
View childView = rv.findChildViewUnder(e.getX(), e.getY());
int position = childView != null ? rv.getChildAdapterPosition(childView) : -1;
return false;
}
@Override
public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
}