android - 如何使用 RangeSeekbar 的 onProgressChanged 方法?

标签 android range seekbar

我已成功将此网站 ( http://code.google.com/p/range-seek-bar/ ) 中的 RangeSeekbar 实现到我的应用程序中。

现在很多人都遇到的问题是,我们在 RangeSeekbar 的代码中找不到两个拇指的 onProgressChanged 方法。

我必须编写自己的 onProgressChanged 吗?

我将 RangeSeekbar 实现到 DialogFragment 中。对于普通的 Seekbar 来说一切都工作正常。

http://www.directupload.net/file/d/3582/mokh6mkb_jpg.htm <-- 如何让“to”左右的两个TextView显示RangeSeekbar的选定值?

到目前为止我的代码:

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);
    }


}

感谢您的帮助。

最佳答案

RangeSeekbar 是一个通用类。如果您将 T 参数作为范围值类型传递给它,则 RangSeekBar 将左拇指值传递为 minValue,将右拇指值传递为 maxValue RangeSeekBar.OnRangeSeekBarChangeListener.(RangeSeekBar bar, T minValue, T maxValue)。

您的类(class)的更改行扩展到:

public class LookingAgeFragment extends DialogFragment implements OnRangeSeekBarChangeListener<Integer>

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

    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));
        }
    });

我认为通过这个改变你的问题将会得到解决。 当您的年龄范围不连续并且可能是离散的时,如果需要更通用的解决方案,我建议使用此解决方案

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]));
        }
    });
}

}

关于android - 如何使用 RangeSeekbar 的 onProgressChanged 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22870285/

相关文章:

Android:如何在扩展 SeekBar 时从 AccessibilityEvents 中消除语音文本?

android - 将色相图像效果与搜索栏一起使用

android - 使单元格宽度和高度相同以填充表格

android - 基于 Gradle 中构建变体的不同可绘制对象

excel - 如何在Excel中获取动态范围列引用:)

sqlite - SQLite:如何使用count(*)范围更新列?

android - 火力地堡崩溃 : Failed to initialize crash reporting

android - 在启动外部 Activity/Intent 后返回应用程序时显示应用程序主菜单/主屏幕

javascript - 检查输入的时间值

android - 如何在警告对话框中放置搜索栏?