简体   繁体   中英

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. The actual XML for the textview:

            <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:

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:

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.

You are inadvertently using this overload:

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.

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...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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