سؤال

I´ve succesfully implemented the RangeSeekbar from this website ( http://code.google.com/p/range-seek-bar/) into my App.

The Problem alot of people now have tho, is that we can´t find an onProgressChanged Method for the two thumbs in the code for the RangeSeekbar.

Do i have to write my own onProgressChanged?

I implemented the RangeSeekbar into a DialogFragment. For the normal Seekbar everything worked fine.

http://www.directupload.net/file/d/3582/mokh6mkb_jpg.htm <-- How can I get the two TextViews to the left and right of "to" to show the selected Value of the RangeSeekbar?

My Code so far:

package com.example.test2;

import com.example.test2.RangeSeekBar.OnRangeSeekBarChangeListener;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.SeekBar;
import android.widget.TextView;

public class LookingAgeFragment extends DialogFragment implements View.OnClickListener, OnRangeSeekBarChangeListener {

    protected static final String TAG = null;
    public static String username; 
    static int lowestAge;
    static int highestAge;
    static TextView viewTo, viewMaxAge, viewMinAge;
    RangeSeekBar<Integer> seekBar;


    public void onAttach(Activity activity){
        super.onAttach(activity);
    }


    public void onCeate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);



    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View view= inflater.inflate(R.layout.fragment_age_looking,null);
        getDialog().setTitle(getString(R.string.lookingage_title));
        Button button = (Button)view.findViewById(R.id.buttonLeaveFragmentLookingAge);
        viewTo = (TextView)view.findViewById(R.id.textView_to);
        viewMaxAge = (TextView)view.findViewById(R.id.textView_maxAge);
        viewMinAge = (TextView)view.findViewById(R.id.textView_minAge);
        button.setOnClickListener(this);

                // create RangeSeekBar as Integer range between 20 and 75
        seekBar = new RangeSeekBar<Integer>(20, 75, getActivity());
        seekBar.setOnRangeSeekBarChangeListener(new OnRangeSeekBarChangeListener<Integer>() {
                @Override
                public void onRangeSeekBarValuesChanged(RangeSeekBar<?> bar, Integer minValue, Integer maxValue) {
                        // handle changed range values
                        Log.i(TAG, "User selected new range values: MIN=" + minValue + ", MAX=" + maxValue);
                }
        });

        ViewGroup layout = (ViewGroup) view.findViewById(R.id.rangeSeekbarContainer);
        layout.addView(seekBar);

        setUpLayout();
        return view;


    }

    @SuppressLint("NewApi")
    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);

        Bundle bundle = this.getArguments();
        if(bundle != null){
        username = bundle.getString("username", null);
        }
    }


    private void setUpLayout() {
        // TODO Auto-generated method stub

        setCancelable(false);

        //bar.setOnSeekBarChangeListener(yourSeekBarListener);

    }


    public void saveDataChange(String s, String data){
        String help = "com.example.test2.PREFERENCE_FILE_KEY_"+username;
        Context context = getActivity();
        SharedPreferences sharedPref = context.getSharedPreferences(help, Context.MODE_PRIVATE);

        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString(s, data);
        editor.commit();
    }

    public String getData(String s){
        String data;
        String help = "com.example.test2.PREFERENCE_FILE_KEY_"+username; 
        Context context = getActivity();
        SharedPreferences sharedPref = context.getSharedPreferences(help, Context.MODE_PRIVATE);
        data = sharedPref.getString(s, null);
        return data;
    }


    @Override
    public void onClick(View view) {
        // TODO Auto-generated method stub
        switch(view.getId()){
            case R.id.buttonLeaveFragmentLookingAge:
            dismiss();  

            break;

        }
    }

    public void onProgressChanged() {
        // TODO Auto-generated method stub
        int maxvalue = (Integer) seekBar.getSelectedMaxValue();
        viewMaxAge.setText(maxvalue);
        int minvalue = (Integer) seekBar.getSelectedMinValue();
        viewMinAge.setText(minvalue);
    }

    public void onStartTrackingTouch(SeekBar arg0) {
        // TODO Auto-generated method stub

    }

    public void onStopTrackingTouch(SeekBar arg0) {
        // TODO Auto-generated method stub
        int maxvalue = (Integer) seekBar.getSelectedMaxValue();
        viewMaxAge.setText(maxvalue);
        int minvalue = (Integer) seekBar.getSelectedMinValue();
        viewMinAge.setText(minvalue);
    }

public void onRangeSeekBarValuesChanged(RangeSeekBar bar, Object minValue,
            Object maxValue) {
        // TODO Auto-generated method stub
        viewMaxAge.setText((String)maxValue);

        viewMinAge.setText((String)minValue);
    }


}

Thank you for your help.

هل كانت مفيدة؟

المحلول

RangeSeekbar is a generic class. if your pass T parameter to it as type of range values, then RangSeekBar pass left thumb Value as minValue and right thumb Value as maxValue in RangeSeekBar.OnRangeSeekBarChangeListener.(RangeSeekBar bar, T minValue, T maxValue).

change line of your class extends to:

public class LookingAgeFragment extends DialogFragment implements OnRangeSeekBarChangeListener<Integer>

after that you should change Object to Integer in your code at this line

    seekBar.setOnRangeSeekBarChangeListener(new RangeSeekBar.OnRangeSeekBarChangeListener<Integer>() {
        @Override
        public void onRangeSeekBarValuesChanged(RangeSeekBar<?> bar, Integer minValue, Integer maxValue) {
            viewMinAge.setText(String.valueOf(minValue));
            viewMaxAge.setText(String.valueOf(minValue));
        }
    });

I think by this changes your problem will be solved. for more generic solution when your ages range is not continuous and maybe discrete, I suggest this solution

public class LookingAgeFragment extends DialogFragment implements RangeSeekBar.OnRangeSeekBarChangeListener<Integer> {

RangeSeekBar<Integer> seekBar;
int[] ageValues={10, 20, 30, 50, 100};


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    // create RangeSeekBar as Integer range between 20 and 75
    seekBar = new RangeSeekBar<Integer>(0, ageValues.length - 1, getActivity());
    seekBar.setOnRangeSeekBarChangeListener(new RangeSeekBar.OnRangeSeekBarChangeListener<Integer>() {
        @Override
        public void onRangeSeekBarValuesChanged(RangeSeekBar<?> bar, Integer minValue, Integer maxValue) {
            viewMinAge.setText(String.valueOf(ageValues[minValue]));
            viewMaxAge.setText(String.valueOf(ageValues[minValue]));
        }
    });
}

}

نصائح أخرى

I use next code for getting the values on changing event:

rangeSeekBar.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d("MinValue", rangeSeekBar.getSelectedMinValue().toString());
                Log.d("MaxValue", rangeSeekBar.getSelectedMaxValue().toString());
                return false;
            }
        });

In class ReangeSekkBar you have this if in ACTION_MOVE

 if (notifyWhileDragging && listener != null) {
 listener.onRangeSeekBarValuesChanged(this,   getSelectedMinValue(), getSelectedMaxValue());
   }

delete this if

//if (notifyWhileDragging && listener != null) {
 listener.onRangeSeekBarValuesChanged(this,   getSelectedMinValue(), getSelectedMaxValue());
   //}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top