为什么在RecyclerView中,findViewByPosition()在EditText上返回null

问题描述 投票:1回答:2

我有一个Activity,其中有一个RecyclerView,然后保存ButtonRecyclerView的每个项目(足球比赛)都包含一些文本(球队名称)和EditText,用户在此处输入数据(实际上是在比赛中下注)。我的目标是当用户单击保存Activity时将这些乐谱保存到Button中的列表中。

[我在Activity中实现了此方法,实际上是从LinearLayoutManager中获取特定项,然后从EditText中获取数据,但是findViewByPosition()方法(或getChildAt()有不同的方法可以执行此操作)有时会返回空。

我在类似问题上看到了另一个答案,但它们并没有帮助我。也许我的策略是错误的,因为我在Activity中制定了完整的逻辑(最好在Adapter中执行此操作?),并且即使只有一个用户输入了分数,我仍然可以理解RecyclerView中的所有项目。

    private List<Bet> getUserBets() {
        View betView;
        Bet betItem;
        EditText userBet1;
        EditText userBet2;

        int numberOfMatches = rvBetsAdapter.getItemCount();
        List<Bet> bets = new ArrayList<>();

        for (int i = 0; i < numberOfMatches; i++)
        {
            betItem = rvBetsAdapter.getItem(i);
            betView = linearLayoutManager.findViewByPosition(i); 
            userScore1 = (EditText) betView.findViewById(R.id.result1); // <- NPE appears
            userScore2 = (EditText) betView.findViewById(R.id.result2);
            //here i checked whether the editText is empty and other stuff
            bets.add(betItem);
        }
        return bets;
    }

我该如何解决?我想我应该在适配器的onBindViewHolder方法中做些什么,但是究竟是什么呢?我将非常感谢您的帮助。

android android-activity android-recyclerview recycler-adapter
2个回答
2
投票

您应该添加到Bet模型变量中,该变量包含EditText值,例如editTextValue

并使用适配器列表中的列表来访问它,像这样最终从那里使用EditText值。 rvBetsAdapter.getItem(i).editTextValue

[editTextValue可以使用TextWatcher.afterTextChanged()回调设置


0
投票

您只能找到或获取屏幕上可见的视图。

使用findViewByPosition(2)之前通过recyclerView.scrollToPosition(2);转到位置2

如果您想更改此视图的值,最好的方法是将您的商品放入列表中

yourModel item = (yourModel) itemList.Get(2)
item.Name = "Edited";

yourAdapter.notifyItemChanged(2);

© www.soinside.com 2019 - 2024. All rights reserved.