无法投射 android.app.fragment

Can not cast android.app.fragment

我看过其他帖子,他们都暗示主机 activity java 文件没有扩展 android.support.v4.app.Fragment。但是,我不知道如何使托管 java 文件扩展 android.support.v4.app.Fragment。 我试过将依赖项添加到 gradle 文件,但这也不起作用。

这是托管 activity 片段:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import course.examples.fragmentstaticlayout.TitlesFragment.ListSelectionListener;

public class QuoteViewerActivity extends Activity implements ListSelectionListener{

    public static String[] mTitleArray;
    public static String[] mQuoteArray;
    private QuotesFragment mDetailsFragment;

    private static final String TAG = "QuoteViewerActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mTitleArray = getResources().getStringArray(R.array.Titles);
        mQuoteArray = getResources().getStringArray(R.array.Quotes);

        setContentView(R.layout.main);

        mDetailsFragment = (QuotesFragment) getFragmentManager().findFragmentById(R.id.details);
    }

相关行是代码段的最后一行。这是我的 QuotesFragment。

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class QuotesFragment extends Fragment {

    private TextView mQuoteView = null;
    private int mCurrIdx = -1;
    private int mQuoteArrayLen;

    private static final String TAG = "QuotesFragment";

    public int getShownIndex() {
        return mCurrIdx;
    }

    public void showQuoteAtIndex(int newIndex) {
        if (newIndex < 0 || newIndex >= mQuoteArrayLen)
            return;
        mCurrIdx = newIndex;
        mQuoteView.setText(QuoteViewerActivity.mQuoteArray[mCurrIdx]);
    }

    @Override
    public void onAttach(Context context){
        Log.i(TAG, getClass().getSimpleName() + ":entered onAttach()");

        super.onAttach(context);

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, getClass().getSimpleName() + ":entered onCreate()");
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.quote_fragment, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mQuoteView = (TextView) getActivity().findViewById(R.id.quoteView);
        mQuoteArrayLen = QuoteViewerActivity.mQuoteArray.length;

    }

假设我对主机 activity 没有扩展 support.v4 的看法是正确的,我该怎么做?

尝试将 getFragmentManager() 更改为 getSupportFragmentManager(),并在 QuoteViewerActivity 中扩展 FragmentActivity 而不是 Activity

这是因为您正试图将 Fragment 转换为 SupportFragment

您的 QuotesFragment 正在扩展 SupportFragment,并且在转换时您正在尝试使用 FragmentManager and fragment 哪个 returns 片段,而不是 supportFragment

尝试使用 geSupportFragmentManager 而不是 getFragmentManager

您还应该为您的 QuoteViewerActivity

扩展 AppCompatActivity 或 FragmentActivity 而不是 Activity

Here is similar question