简体   繁体   English

从SeekBar设置进度

[英]Set a progress from a SeekBar

I have this seekbar and this TextView in which I want to show the actual progress of the seekbar. 我有这个搜索栏和这个TextView,我想在其中显示搜索栏的实际进度。 The actual XML for the textview: 文本视图的实际XML:

            <SeekBar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/seekBar1"
            android:layout_below="@+id/dimension_text"/>

            <TextView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:text="@string/num_dimension" //where num_dimension is a number
            android:id="@+id/textViewProgress"/>

And the actual Java: 和实际的Java:

public class MainActivity extends ActionBarActivity {
int p=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final TextView t1=(TextView) findViewById(R.id.test);
    final SeekBar sk=(SeekBar) findViewById(R.id.seekBar1);
    final TextView textProgress = (TextView)findViewById(R.id.textViewProgress);

    sk.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
            if(p<12)
            {
                p=12;
                sk.setProgress(p);
            }

        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
        }
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
// TODO Auto-generated method stub
            p=progress;
            t1.setTextSize(p);
            textProgress.setText(p); //this is the line that should do the work
        }
    });

Whenever I tap on the seekbar my app is force-closed. 每当我点击搜索栏时,我的应用就会被强制关闭。 So I'm a little bit confused with this, what am I doing wrong? 所以我对此有些困惑,我在做什么错?

This is the logcat: 这是logcat:

05-20 17:59:04.141  29872-29872/com.myapplication2.app D/dalvikvm﹕ GC_FOR_ALLOC freed 424K, 14% free 10583K/12268K, paused 23ms, total 23ms
05-20 17:59:04.171  29872-29872/com.myapplication2.app I/Xposed﹕ [IconThemer/Mod] [nexbit.moonshine.icons] Loading replacements for package com.myapplication2.app
05-20 17:59:04.251  29872-29872/com.myapplication2.app D/dalvikvm﹕ GC_FOR_ALLOC freed 274K, 13% free 10804K/12348K, paused 19ms, total 19ms
05-20 17:59:04.312  29872-29872/com.myapplication2.app I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13
05-20 17:59:04.382  29872-29872/com.myapplication2.app D/OpenGLRenderer﹕ Enabling debug mode 0
05-20 17:59:10.548  29872-29872/com.myapplication2.app W/ResourceType﹕ No package identifier when getting value for resource number 0x00000002
05-20 17:59:10.548  29872-29872/com.myapplication2.app E/InputEventReceiver﹕ Exception dispatching input event.
05-20 17:59:10.548  29872-29872/com.myapplication2.app D/AndroidRuntime﹕ Shutting down VM
05-20 17:59:10.548  29872-29872/com.myapplication2.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41543ba8)
05-20 17:59:10.558  29872-29872/com.myapplication2.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.myapplication2.app, PID: 29872
    android.content.res.Resources$NotFoundException: String resource ID #0x2
            at android.content.res.Resources.getText(Resources.java:244)
            at android.content.res.XResources.getText(XResources.java:508)
            at android.widget.TextView.setText(TextView.java:3888)
            at com.myapplication2.app.MainActivity$2.onProgressChanged(MainActivity.java:77)
            at android.widget.SeekBar.onProgressRefresh(SeekBar.java:91)
            at android.widget.ProgressBar.doRefreshProgress(ProgressBar.java:655)
            at android.widget.ProgressBar.refreshProgress(ProgressBar.java:667)
            at android.widget.ProgressBar.setProgress(ProgressBar.java:714)
            at android.widget.AbsSeekBar.trackTouchEvent(AbsSeekBar.java:451)
            at android.widget.AbsSeekBar.onTouchEvent(AbsSeekBar.java:379)
            at android.view.View.dispatchTouchEvent(View.java:7706)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2458)
            at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:268)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
            at android.view.View.dispatchPointerEvent(View.java:7886)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553)
            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5682)
            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
            at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
            at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
            at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5655)
            at     android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5701)
            at android.view.Choreographer$Ca

Cast p to a string. p强制转换为字符串。

You are inadvertently using this overload: 您无意中使用了此重载:

http://developer.android.com/reference/android/widget/TextView.html#setText(int) http://developer.android.com/reference/android/widget/TextView.html#setText(int)

public final void setText (int resid)

Which tries to retrieve a string resource with an ID equal to p (you're passing p as resid ), and there's no such resource, which causes the exception. 它将尝试检索ID等于p的字符串资源(您将p作为resid传递),并且没有这样的资源,这会导致异常。

Change 更改

textProgress.setText(p);

to

textProgress.setText(Integer.toString(p));

This will call the proper overload: 这将调用适当的重载:

public final void setText (CharSequence text)

And your app won't crash. 而且您的应用程序不会崩溃。

Learn to use the Logcat, otherwise you're leaving yourself in the dark... 学习使用Logcat,否则您将陷入困境……

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM