使用 Seekbar 更改 Fragment Class 中的 TextView 值

Change TextView value in a Fragment Class using Seekbar

我使用的是 Seekbar 库,所以当我拖动搜索器时,我希望文本视图使用来自搜索器的值进行更新,但不幸的是我的应用程序崩溃了。我收到一条错误消息 "resource not found on the TextView"。 代码如下:

RangeSeekBar seekBar1;
seekBar1 = (RangeSeekBar)rootView.findViewById(R.id.seekBar);

seekBar1.setValue(10);
seekBar1.setOnRangeChangedListener(new RangeSeekBar.OnRangeChangedListener() {
        @Override
        public void onRangeChanged(RangeSeekBar view, float min, float max, boolean isFromUser) {
            seekBar1.setProgressDescription((int)min+"%");
            TextView txtAmount;
            txtAmount = (TextView)rootView.findViewById(R.id.txtAmount);
            txtAmount.setText((int) min);
        }
});

解决方案:你不能像那样将 int 设置为 TextView,试试这个:

txtAmount.setText(Float.toString(min));

您使用的重载将寻找一个字符串资源标识符,在这种情况下不存在。这是 correct one that takes a CharSequence as an argument (string is a CharSequence).


很高兴知道: 如果您现在想知道 int 如何成为 setText 的参数,这很简单。在您的应用程序中,您可以有一个 strings.xml 文件来定义一组要在应用程序中使用的资源字符串:

<resources>
    <string name="test">This is a test</string>
</resources>

定义后,您可以像这样在 TextView 上显示文本:

txtAmount.setText(R.string.test);

如果您将一个整数传递给 setText,android 期望该值是一个资源。系统正在尝试查找 id 等于 min 的资源。您需要将 min 转换为字符串。

因此,要使其正常工作,请将 txtAmount.setText((int) min); 更改为 txtAmount.setText(String.valueOf(min));