我正在尝试为分页创建自定义视图。
这是代码:
public class PagerView extends LinearLayout {
private Button mPrevButton;
private Button mNextButton;
private TextView mInformationTextView;
public PagerView(Context context) {
this(context, null);
}
public PagerView(Context context, AttributeSet attrs) {
super(context, attrs);
this.initChild(context, attrs);
}
private void initChild(Context context, AttributeSet attrs) {
this.setOrientation(LinearLayout.HORIZONTAL);
this.setVisibility(GONE);
mPrevButton = new Button(context);
mPrevButton.setText("Prev");
mNextButton = new Button(context);
mNextButton.setText("Next");
mInformationTextView = new TextView(context);
mInformationTextView.setText("");
addView(mPrevButton);
addView(mInformationTextView);
addView(mNextButton);
}
public void setPageInformation(int page, int totalPage) {
if (page >= 1 && totalPage >= 1) {
this.setVisibility(VISIBLE);
if (totalPage > 1) {
mInformationTextView.setText(page + "/" + totalPage);
mPrevButton.setEnabled(page != 1);
mNextButton.setEnabled(page != totalPage);
}
} else
this.setVisibility(GONE);
postInvalidate();
}
}
来电者:
public class PoiListActivity extends ActionBarActivity {
private ListView mListView;
private PagerView mPageBar;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.poi_result_layout);
setupListView();
PoiResult poiResult = (PoiResult) GlobalState.getInstance().get(IConstant.Search_Result);
if (poiResult != null) {
refreshListView(poiResult);
}
}
private void refreshListView(PoiResult poiResult) {
mPageBar.setPageInformation(1, 3);
mAdapterItems.clear();
mAdapterItems.addAll(poiResult.poiList);
mAdapter.notifyDataSetChanged();
}
private void setupListView() {
mPageBar = new PagerView(this, this);
mListView = (ListView) findViewById(R.id.poiList);
mListView.addFooterView(mPageBar);
mAdapter = new PoiInfoAdapter(this, R.layout.poi_result_item, mAdapterItems);
mListView.setAdapter(mAdapter);
}
}
但是我有两个问题:
1页面视图永远不会显示。
然后我尝试评论该行
this.setVisibility(GONE); // set it unvisible when inited
然后页面栏显示,但mInformationTextView
的文本仍为空,并且mPrevButton
已启用(由于页面为1,因此应取消启用)。
我设置页面信息后调用了postInvalidate();
,但为什么它没有按预期工作?
2即使是pageView显示,如何使mPrevButton
mNextButton
和mInformationTextView
中心对齐?
答案 0 :(得分:1)
根据您提供的代码,您无需手动使视图层次结构的任何部分无效。尽管您已创建自定义视图,但您仍然只修改现有视图属性(例如可见性),并且这些视图在发生这些更改时将自动失效。
您无法看到该视图的原因是您已将其添加为ListView
的页脚视图,但尚未设置适配器。使用ListView
时,页眉/页脚会添加到您通过setAdapter()
提供的任何适配器实现中,并作为列表项内容的一部分绘制。没有列表适配器(即使它当前是空的),没有视图。因此,最好立即在列表中设置适配器,并在列表数据更改时更新它,而不是等待列表数据设置适配器。