我有一个具有自定义布局的活动,包括SeekBar和ScrollView。每当我以编程方式移动搜索栏时,scrollview重置为top(意味着onLayout被调用),如何设置它以便ScrollView不会被重置?
答案 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。如果您找到了解决方案,请告诉我。