获取 ArrayList 值并将其设置为 TextView on Button Click Not Working - RecyclerView

问题描述

我希望这周的最后一个问题..我已经设置了一个 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()