首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用onProgressChanged方法进行RangeSeekbar?

如何使用onProgressChanged方法进行RangeSeekbar?
EN

Stack Overflow用户
提问于 2014-04-04 18:20:42
回答 3查看 2.6K关注 0票数 2

我成功地实现了RangeSeekbar从这个网站( http://code.google.com/p/range-seek-bar/)到我的应用程序。

现在很多人都有这样的问题,就是我们无法为onProgressChanged代码中的两个大拇指找到一个RangeSeekbar方法。

我必须写我自己的onProgressChanged吗?

我将RangeSeekbar实现为DialogFragment。对于普通的Seekbar来说一切都很好。

jpg.htm <--如何使两个TextViews在" to“的左边和右边显示RangeSeekbar的选定值?

到目前为止,我的守则:

代码语言:javascript
复制
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);
    }


}

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-04 18:45:02

RangeSeekbar是一个泛型类。如果您将T参数作为范围值的类型传递给它,那么在RangeSeekBar.OnRangeSeekBarChangeListener.(RangeSeekBar条、T minValue、T maxValue中,RangSeekBar将左拇指值作为minValue传递,右拇指值作为maxValue传递。

类的更改行扩展到:

代码语言:javascript
复制
public class LookingAgeFragment extends DialogFragment implements OnRangeSeekBarChangeListener<Integer>

之后,您应该将代码中的Object更改为Integer,在这一行中

代码语言:javascript
复制
    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));
        }
    });

我想通过这个改变你的问题就会解决。对于更通用的解决方案,当您的年龄范围不连续且可能是离散的时,我建议使用此解决方案。

代码语言:javascript
复制
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]));
        }
    });
}

}

票数 3
EN

Stack Overflow用户

发布于 2016-07-14 09:50:28

我使用下一个代码获取更改事件的值:

代码语言:javascript
复制
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;
            }
        });
票数 2
EN

Stack Overflow用户

发布于 2014-06-20 12:23:00

在类ReangeSekkBar中,如果在ACTION_MOVE中有这个

代码语言:javascript
复制
 if (notifyWhileDragging && listener != null) {
 listener.onRangeSeekBarValuesChanged(this,   getSelectedMinValue(), getSelectedMaxValue());
   }

如果

代码语言:javascript
复制
//if (notifyWhileDragging && listener != null) {
 listener.onRangeSeekBarValuesChanged(this,   getSelectedMinValue(), getSelectedMaxValue());
   //}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22870285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档