获取 ArrayList 值并将其设置为按钮单击时的 TextView 不工作 - RecyclerView

Posted

技术标签:

【中文标题】获取 ArrayList 值并将其设置为按钮单击时的 TextView 不工作 - RecyclerView【英文标题】:Get ArrayList value and set it to a TextView on Button Click Not Working - RecyclerView 【发布时间】:2021-10-05 12:38:44 【问题描述】:

我希望这周的最后一个问题.. 我已经设置了一个 RecyclerView 和一个 Array,它以 10 为增量遍历数字 0 - 350。通过单击 @ 会弹出作为活动的叠加层987654323@(每日目标)。选择值后,应将所选值设置为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, int position, View view) 
                    // this does nothing
                    
                    // dailyGoal.setText(dailyGoalTime.get(timeArray[i]));
                    // dailyGoalRecycler.setVisibility(View.GONE);
                    
                
        );

界面

public interface OnItemClickListener 

    void onItemClicked(RecyclerView recyclerView, int position, View v);

    void onItemClicked(TextView time, int position, 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);
    


【问题讨论】:

我不确定我是否正确地遵循了一切,但这可能是问题所在:dailyGoal.setText(timeArray[i]);。似乎您打算改为设置 timeArray[position] 。至少,我看不到i 的声明位置。那些在循环中的东西在那个时候超出了范围,而且无论如何也没有任何意义。 @MikeM。我在发送之前尝试过,应该补充一点对不起。该应用程序在 setText 方法处崩溃 onClick 并出现错误 android.content.res.Resources$NotFoundException: String resource ID #0x3。我已经看到了 for 循环在按钮点击内的答案,但就像你说的那样,我认为这没有意义? 抱歉,这里没有i。你想要position:dailyGoal.setText(String.valueOf(timeArray[position])); 您是不是要这样做:dailyGoal.setText(dailyGoalTime.get(position));? 就是这个!我可以发誓我已经试过了……我疲惫的大脑一定欺骗了我。非常感谢! 【参考方案1】:

你忘记了最重要的部分。您需要像这样在项目点击上调用接口方法:

holder.itemView.setOnClickListener(new View.OnClickListener()
    @Override
    public void onClick(View v)
        listener.onItemClicked(holder.time, position, holder.itemView);
    
);

【讨论】:

以上是关于获取 ArrayList 值并将其设置为按钮单击时的 TextView 不工作 - RecyclerView的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI:在按钮单击时获取文本框值

如何获取单击的选中按钮的视图位置以及如何根据其位置将其设置为选中状态

Tkinter - 单击默认情况下未设置的按钮后无法获取单选按钮值

ActionListener添加到JButton但不起作用

如何获取单选按钮的值并将其传递给 laravel 中的控制器?

如何使用 Cursor 获取所有主键值并将其添加到 Arraylist 中?