Java 无法强制转换android.app.fragment

Java 无法强制转换android.app.fragment,java,android,android-fragments,android-support-library,Java,Android,Android Fragments,Android Support Library,我看过其他帖子,它们都表明主机活动java文件没有扩展android.support.v4.app.Fragment。但是,我不知道如何使宿主java文件扩展android.support.v4.app.Fragment。 我已经尝试将依赖项添加到gradle文件中,但也不起作用 以下是托管活动片段: import android.app.Activity; import android.os.Bundle; import android.util.Log; import course.exam

我看过其他帖子,它们都表明主机活动java文件没有扩展android.support.v4.app.Fragment。但是,我不知道如何使宿主java文件扩展android.support.v4.app.Fragment。 我已经尝试将依赖项添加到gradle文件中,但也不起作用

以下是托管活动片段:

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);
    }
这一行是代码段的最后一行。这是我的引文片段

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;

    }
导入android.content.Context;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
公共类QuotesFragment扩展了片段{
私有文本视图mQuoteView=null;
私有整数mCurrIdx=-1;
姆库特拉伦私人酒店;
私有静态最终字符串标记=“QuotesFragment”;
public int getShownIndex(){
返回mCurrIdx;
}
public void showQuoteAtIndex(int newIndex){
if(newIndex<0 | | newIndex>=mQuoteArrayLen)
返回;
mCurrIdx=newIndex;
mquteview.setText(quoteviewractivity.mqutearray[mCurrIdx]);
}
@凌驾
公共void-onAttach(上下文){
Log.i(标记,getClass().getSimpleName()+“:输入onAttach()”;
super.onAttach(上下文);
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
Log.i(标记,getClass().getSimpleName()+”:输入onCreate()”;
super.onCreate(savedInstanceState);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(R.layout.quote_碎片,容器,假);
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mQuoteView=(TextView)getActivity().findViewById(R.id.quoteView);
mQuoteArrayLen=QuoteViewPractivity.mQuoteArray.length;
}

假设我对主机活动没有扩展support.v4的看法是正确的,我该如何做?

尝试将
getFragmentManager()
更改为
getSupportFragmentManager())
并扩展
片段活动
而不是
quoteView实践中的
活动

这是因为您试图将
片段
强制转换为
支持片段

您的
QuotesFragment
正在扩展
SupportFragment
,在强制转换时,您尝试使用
FragmentManager和fragment
,后者返回fragment,而不是
SupportFragment

尝试使用
geSupportFragmentManager
代替
getFragmentManager

此外,您还应该扩展AppCompatActivity或FragmentActivity,而不是QuoteView活动


显然,您正在将新的API(13)与SupportPI混合使用……fx:
getFragmentManager()
它不存在于旧的API中…如果你想支持比13更旧的API,你应该记住它对片段一无所知…还有基本的继承:
android.app.Fragment
不是
android.support.v4.app.Fragment
在AppCompatActivity和FragmentActivity之间有偏好差异吗City?意思是使用一个比另一个更好?用例不同,AppCompatiActivity是最新的东西。@jasonadams看到这个>>