IPagerTitleView的onSelected有时回调有时不回调,好像是因为listview没有内容时不会回调,什么原因,请作出解释,和代码示例
时间: 2023-07-11 17:19:38 浏览: 90
IPagerTitleView的onSelected()方法是在标题视图被选中时回调的。如果这个方法有时回调有时不回调,可能是因为标题视图没有正确地设置选中状态导致的。
特别是在使用ListView作为标题视图时,如果ListView没有内容,那么onSelected()方法可能不会正确地回调。这是因为ListView没有内容时,它的选中状态没有被正确地设置,导致onSelected()方法没有被调用。
为了解决这个问题,可以在ListView中设置一个空的Adapter,确保ListView有内容并且正确地设置了选中状态。或者,可以在onSelected()方法中手动检查视图的选中状态,以确保正确地处理选中事件。
以下是一个简单的示例代码,演示了如何在使用ListView作为PagerTitleView时,确保onSelected()方法被正确地回调:
```java
public class MyPagerTitleView extends ListView implements IPagerTitleView {
private int mSelectedColor;
private int mNormalColor;
public MyPagerTitleView(Context context) {
super(context);
init();
}
public MyPagerTitleView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyPagerTitleView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, new ArrayList<String>()));
setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setSelection(position);
}
});
}
@Override
public void onSelected(int index, int totalCount) {
View view = getChildAt(index - getFirstVisiblePosition());
if (view != null) {
TextView textView = view.findViewById(android.R.id.text1);
textView.setTextColor(mSelectedColor);
}
}
@Override
public void onDeselected(int index, int totalCount) {
View view = getChildAt(index - getFirstVisiblePosition());
if (view != null) {
TextView textView = view.findViewById(android.R.id.text1);
textView.setTextColor(mNormalColor);
}
}
@Override
public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) {
// do nothing
}
@Override
public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) {
// do nothing
}
@Override
public void onSelectedTextColor(int color) {
mSelectedColor = color;
}
@Override
public void onNormalTextColor(int color) {
mNormalColor = color;
}
@Override
public int getContentWidth() {
return getWidth();
}
@Override
public int getContentHeight() {
return getHeight();
}
@Override
public View getContentView() {
return this;
}
@Override
public void onSelected() {
// do nothing
}
@Override
public void onDeselected() {
// do nothing
}
}
```
在这个示例代码中,MyPagerTitleView继承自ListView,并实现了IPagerTitleView接口。在init()方法中,我们设置了一个空的ArrayAdapter作为ListView的Adapter,并设置了OnItemClickListener,以便在用户点击ListView时更新选中状态。
在onSelected()和onDeselected()方法中,我们通过getChildAt()方法获取选中的视图,并手动设置选中状态。这样,在ListView没有内容时,我们仍然可以正确地处理选中事件,确保onSelected()方法被正确地回调。
阅读全文