问题描述
我希望这周的最后一个问题..我已经设置了一个 RecyclerView
和一个 Array
,它以 10 为增量迭代数字 0 - 350。这会作为活动的叠加层弹出通过点击 TextView
(每日目标)。选择值后,应将所选值设置为 TextView
。
这一切正常,值确实设置了,但是它将值设置为第一个值,即 10 分钟。我认为这是因为 onItemClicked
指向整个 RecyclerView
而不是 Recycler TextView
(时间),它包含一个方法,但是每当我尝试使用它,onClick
函数什么也不做..
我认为这是一个简单的解决方案,但我已经弄了一段时间,找不到可行的解决方案..
活动
ArrayList<String> dailyGoalTime;
int[] timeArray = new int[360];
dailyGoal.setText("60");
dailyGoalRecycler.setVisibility(View.GONE);
dailyGoalTime = new ArrayList<>();
for (int i = 0; i < timeArray.length; i++) {
timeArray[i] = i;
}
for (int i = 0; i < timeArray.length; i++) {
if (i % 10 == 0 && i != 0) {
dailyGoalTime.add(i + " mins");
}
}
ItemClickSupport.addTo(dailyGoalRecycler).setonItemClickListener(
new ItemClickSupport.OnItemClickListener() {
@Override
public void onItemClicked(RecyclerView recyclerView,int position,View v) {
dailyGoal.setText(timeArray[i]);
dailyGoalRecycler.setVisibility(View.GONE);
}
@Override
public void onItemClicked(TextView time,View view) {
// this does nothing
// dailyGoal.setText(dailyGoalTime.get(timeArray[i]));
// dailyGoalRecycler.setVisibility(View.GONE);
}
}
);
界面
public interface OnItemClickListener {
void onItemClicked(RecyclerView recyclerView,View v);
void onItemClicked(TextView time,View view);
}
适配器
ArrayList<String> dailyGoalTime;
ItemClickSupport.OnItemClickListener listener;
public DailyGoalAdapter(ArrayList<String> dailyGoalTime) {
this.dailyGoalTime = dailyGoalTime;
}
@NonNull
@Override
public DailyGoalAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull DailyGoalAdapter.ViewHolder holder,int position) {
holder.time.setText(dailyGoalTime.get(position));
}
@Override
public int getItemCount() {
return dailyGoalTime.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView time;
public ViewHolder(@NonNull View itemView) {
super(itemView);
time = itemView.findViewById(tvTime);
}
}
解决方法
你忘记了最重要的部分。您需要像这样在项目点击时调用接口方法:
freeze()