当SeekBar移动时,Android ScrollView会重置

时间:2012-03-23 16:27:54

标签: android scrollview seekbar

我有一个具有自定义布局的活动,包括SeekBar和ScrollView。每当我以编程方式移动搜索栏时,scrollview重置为top(意味着onLayout被调用),如何设置它以便ScrollView不会被重置?

2 个答案:

答案 0 :(得分:6)

你不应该一次又一次地创建行(getView()方法)..

@Override
    public View getView(int position, View arg1, ViewGroup parent) {
        // TODO Auto-generated method stub

           LayoutInflater inflater = getLayoutInflater();
             View row = arg1;
             if(row==null)
                {
                row = inflater.inflate(R.layout.listview_item_row, parent, false);

                }
           //  Log.d("position", ""+str[position]);
                Button b1 = (Button)row.findViewById(R.id.btn);
                 final SeekBar s1 = (SeekBar)row.findViewById(R.id.seekBar1);
                //s1.setFocusable(true);
                b1.setText(str[position]);
                   b1.setOnClickListener(new OnClickListener()
                   {
                     public void onClick(View v) {

                       Toast.makeText(getApplicationContext(), "Progress is "+s1.getProgress()+"%", Toast.LENGTH_LONG).show();

                   }

                  });  

        return row;
}

答案 1 :(得分:0)

我有同样的问题,到目前为止我一直无法解决。

我在SeekBar onStartTrackingTouch期间尝试了几项操作,在我的ScrollView上设置名为quickScroll的scoll。这在设置滚动方面起作用,但每次在seekBar上改变进度时,ScrollView将快速重置然后返回到设置位置。

@Override
    public void onStartTrackingTouch(SeekBar seekBar) {

            quickScroll.post(new Runnable() {
                @Override
                public void run() {

                    //quickScroll.requestDisallowInterceptTouchEvent(true);
                    //quickScroll.setEnabled(false);
                     quickScroll.scrollTo(0, 54);
                    // quickScroll.requestDisallowInterceptTouchEvent(true);
                } 
            });


    }

然而,在您可以看到的许多其他内容中,当在我的自定义viewGroup上调用onLayout时,它会将Scroll重置为(0,0)。因为它代表我的onLayout()在按下每个按钮时被调用,但仅在更改SeekBar时重置ScrollView。如果您找到了解决方案,请告诉我。