【发布时间】:2014-02-13 12:44:41
【问题描述】:
如何实现选项卡,使用每个选项卡的活动。我找到了this tutorial,但它是用片段实现的。 Here 是一个视频,它准确地展示了我想要做什么。
这是我一直在尝试做的:
DefaultActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater) DefaultActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.fragment, null);
mHeader = inflater.inflate(R.layout.header, null);
mQuickReturnView = (TextView) view.findViewById(R.id.sticky);
mPlaceHolder = mHeader.findViewById(R.id.placeholder);
mListView = (QuickReturnListView) getListView(); //showing class cast exception here
mQuickReturnView.setText("Default");
mListView.addHeaderView(mHeader);
String[] array = new String[] { "Android", "Android", "Android",
"Android", "Android", "Android", "Android", "Android",
"Android", "Android", "Android", "Android", "Android",
"Android", "Android", "Android" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,array);
mListView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mQuickReturnHeight = mQuickReturnView.getHeight();
mListView.computeScrollY();
mCachedVerticalScrollRange = mListView.getListHeight();
}
});
mListView.setOnScrollListener(new OnScrollListener() {
@SuppressLint("NewApi")
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mScrollY = 0;
int translationY = 0;
if (mListView.scrollYIsComputed()) {
mScrollY = mListView.getComputedScrollY();
}
int rawY = mPlaceHolder.getTop()
- Math.min(
mCachedVerticalScrollRange
- mListView.getHeight(), mScrollY);
switch (mState) {
case STATE_OFFSCREEN:
if (rawY <= mMinRawY) {
mMinRawY = rawY;
} else {
mState = STATE_RETURNING;
}
translationY = rawY;
break;
case STATE_ONSCREEN:
if (rawY < -mQuickReturnHeight) {
mState = STATE_OFFSCREEN;
mMinRawY = rawY;
}
translationY = rawY;
break;
case STATE_RETURNING:
translationY = (rawY - mMinRawY) - mQuickReturnHeight;
if (translationY > 0) {
translationY = 0;
mMinRawY = rawY - mQuickReturnHeight;
}
if (rawY > 0) {
mState = STATE_ONSCREEN;
translationY = rawY;
}
if (translationY < -mQuickReturnHeight) {
mState = STATE_OFFSCREEN;
mMinRawY = rawY;
}
break;
}
/** this can be used if the build is below honeycomb **/
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB) {
anim = new TranslateAnimation(0, 0, translationY,
translationY);
anim.setFillAfter(true);
anim.setDuration(0);
mQuickReturnView.startAnimation(anim);
} else {
mQuickReturnView.setTranslationY(translationY);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
});
rlMain = (RelativeLayout)findViewById(R.id.main);
rlMain.addView(view);
setContentView(R.layout.activity_main);
}
现在它在mListView = (QuickReturnListView) getListView(); 中显示错误
02-13 21:23:03.389: E/AndroidRuntime(26896): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.quickreturnlistwithactivity/com.example.quickreturnlistwithactivity.QuickReturnActivity}: java.lang.ClassCastException: android.widget.ListView cannot be cast to com.example.quickreturnlistwithactivity.QuickReturnListView
02-13 21:23:03.389: E/AndroidRuntime(26896): Caused by: java.lang.ClassCastException: android.widget.ListView cannot be cast to com.example.quickreturnlistwithactivity.QuickReturnListView
02-13 21:23:03.389: E/AndroidRuntime(26896): at com.example.quickreturnlistwithactivity.QuickReturnActivity.onCreate(QuickReturnActivity.java:67)
【问题讨论】:
-
你有什么问题?
-
我的主要问题是尝试使用活动制作与视频中给出的完全相同的列表视图。在示例代码中它使用片段。
-
@MD 我知道我不是很清楚,但如果你通过这个例子你会明白我的问题。
-
我正在用 Activity 实现相同的功能,
-
@MD 在我的实现中,它在
view = inflater.inflate(R.layout.fragment, null);行中显示java.lang.StackOverflowError
标签: android android-listview android-fragments