无法投射 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
我看过其他帖子,他们都暗示主机 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 而不是 ActivityHere is similar question