【问题标题】:How to implement QuickReturnList in an Activity?如何在 Activity 中实现 QuickReturnList?
【发布时间】: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


【解决方案1】:

只需将每个选项卡视为具有相同视图的单独应用程序。唯一的区别是选择了女巫选项卡。

您唯一的缺点是性能,因为活动是比片段重得多的过程。 此外,如果您想在活动之间共享数据,这将比使用片段更难。

您也可能会发现this 教程很有趣。它显示了活动转换的小示例。

【讨论】:

  • 如果我只想要一项活动,请您给我建议,例如示例中的DefaultFragment。那么如何将其转换为 Activity。
  • @Kunu 您在找到的教程中获得了完整的源代码。除了这些,我还能帮助你吗?!
【解决方案2】:

你确定你的标记看起来像:

<your_package_path.QuickReturnListView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 2016-03-07
    • 2018-07-26
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多