【问题标题】:Android SeekBar not working in onCreateViewAndroid SeekBar 在 onCreateView 中不起作用
【发布时间】:2013-01-19 16:11:02
【问题描述】:

在我的 MainActivity onCreateView 中,我以编程方式(无 xml)创建了一个搜索栏,如下所示:

        mVolControlSB = new SeekBar(context);
        mVolControlSB.setMax(maxVolume);
        mVolControlSB.setProgress(curVolume);
        mVolControlSB.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onStopTrackingTouch(SeekBar arg0) {
            Log.d("MainActivity", "volControlSB.setOnSeekBarChangeListener onStopTrackingTouch arg0="+arg0);
        }

        @Override
        public void onStartTrackingTouch(SeekBar arg0) {
            Log.d("MainActivity", "volControlSB.setOnSeekBarChangeListener onStartTrackingTouch arg0="+arg0);
        }

        @Override
        public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
            mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
        }
    });
    mVolControlSB.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 0, 20));
    kitctrlLayout.addView(mVolControlSB);

它显示了搜索栏,但拇指位置在错误的位置(在我的示例中,maxVolume 为 15,curVolume 为 10,但它一直显示到左侧)。此外,当我拖动拇指时没有调用回调,没有任何反应。我将 mVolControlSB 设为 MainActivity 类中的静态字段,但我也尝试将其作为本地字段

static  SeekBar mVolControlSB;

有人有想法吗?

注意,我应该补充一点,我正在使用选项卡布局,并且此代码在内部调用

        public static class DummySectionFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

谢谢

【问题讨论】:

  • 尝试在你的onProgressChanged方法中设置mVolControlSB.setProgress(arg1);

标签: android seekbar


【解决方案1】:

这样对我来说很好用。

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

    ll = (LinearLayout) findViewById(R.id.lay);

    mVolControlSB = new SeekBar(this);
    mVolControlSB.setMax(15);
    mVolControlSB.setProgress(10);
    mVolControlSB
            .setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onStopTrackingTouch(SeekBar arg0) {
                    Log.d("MainActivity",
                            "volControlSB.setOnSeekBarChangeListener onStopTrackingTouch arg0="
                                    + arg0.getProgress());
                }

                @Override
                public void onStartTrackingTouch(SeekBar arg0) {
                    Log.d("MainActivity",
                            "volControlSB.setOnSeekBarChangeListener onStartTrackingTouch arg0="
                                    + arg0.getProgress());
                }

                @Override
                public void onProgressChanged(SeekBar arg0, int arg1,
                        boolean arg2) {

                }
            });
    mVolControlSB.setLayoutParams(new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT));
    ll.addView(mVolControlSB);
}

【讨论】:

  • 看起来代码和我的一样,但我的视图是选项卡布局,所以我在 public static class DummySectionFragment extends Fragment 中创建布局。也许这就是问题所在?
  • 有效,这里的关键是在布局参数中,我使用 WRAP_CONTENT 作为宽度错误,你使用 MATCH_PARENT 使其宽度正确,并且回调正在工作,我只是没有看不到他们,因为没有地方可以拖动它。谢谢
  • @Jignesh 我遇到了 SeekBar 的问题你能帮我吗...这是我的问题stackoverflow.com/questions/54692981/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多