问题描述
我无法弄清楚为什么我的objFragment给我的支持管理器带来问题,我收到此错误:
I can't work out why my objFragment is giving me issues with the support manager, I'm getting this error:
Error:(101, 17) error: no suitable method found for replace(int,android.support.v4.app.Fragment)
method FragmentTransaction.replace(int,android.app.Fragment,String) is not applicable
(actual and formal argument lists differ in length)
method FragmentTransaction.replace(int,android.app.Fragment) is not applicable
(actual argument android.support.v4.app.Fragment cannot be converted to android.app.Fragment by method invocation conversion)
它正在objFragment的以下行上发生:.replace(R.id.container, objFragment)
And it's happening on this on objFragment on this line: .replace(R.id.container, objFragment)
这是我的完整代码:
import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.app.Fragment;
/* public class MainActivity extends FragmentActivity {
public static FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// initialising the object of the FragmentManager. Here I'm passing getSupportFragmentManager(). You can pass getFragmentManager() if you are coding for Android 3.0 or above.
fragmentManager = getSupportFragmentManager();
}
} */
public class MainActivity2Activity extends FragmentActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
/**
* Fragment managing the behaviors, interactions and presentation of the navigation drawer.
*/
private NavigationDrawerFragment mNavigationDrawerFragment;
/**
* Used to store the last screen title. For use in {@link #restoreActionBar()}.
*/
private CharSequence mTitle;
public static android.support.v4.app.FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity2);
// initialising the object of the FragmentManager. Here I'm passing getSupportFragmentManager(). You can pass getFragmentManager() if you are coding for Android 3.0 or above.
fragmentManager = getSupportFragmentManager();
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
// initialising the object of the FragmentManager. Here I'm passing getSupportFragmentManager(). You can pass getFragmentManager() if you are coding for Android 3.0 or above.
fragmentManager = getSupportFragmentManager();
}
@Override
public void onNavigationDrawerItemSelected(int position) {
// This method controls the navigation drawer
Fragment objFragment = null;
switch (position) {
case 0:
objFragment = new menu_1_fragment();
break;
case 1:
objFragment = new menu_2_fragment();
break;
case 2:
objFragment = new menu_3_fragment();
break;
case 3:
objFragment = new menu_4_fragment();
break;
case 4:
objFragment = new menu_5_fragment();
break;
}
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, objFragment)
.commit();
}
public void onSectionAttached(int number) {
switch (number) {
case 1:
mTitle = getString(R.string.title_section1);
break;
case 2:
mTitle = getString(R.string.title_section2);
break;
case 3:
mTitle = getString(R.string.title_section3);
break;
case 4:
mTitle = getString(R.string.title_section4);
break;
case 5:
mTitle = getString(R.string.title_section5);
break;
}
}
public void restoreActionBar() {
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);
// actionBar.setTitle(mTitle);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!mNavigationDrawerFragment.isDrawerOpen()) {
// Only show items in the action bar relevant to this screen
// if the drawer is not showing. Otherwise, let the drawer
// decide what to show in the action bar.
getMenuInflater().inflate(R.menu.main_activity2, menu);
restoreActionBar();
return true;
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
// Link to settings in the main menu or create google maps options
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
private static final String ARG_SECTION_NUMBER = "section_number";
/**
* Returns a new instance of this fragment for the given section
* number.
*/
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main_activity2, container, false);
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((MainActivity2Activity) activity).onSectionAttached(
getArguments().getInt(ARG_SECTION_NUMBER));
}
}
}
推荐答案
问题是objFragment
和fragmentManager
之间的片段类型不匹配.第一个来自android.support.v4.app
程序包,第二个来自android.app
程序包.
The problem is that there is a mismatch in fragments types between objFragment
and fragmentManager
. The first is from package android.support.v4.app
while the second is from the android.app
package.
请参见此答案,了解两种片段之间的区别.
See this answer here to know the difference between the two types of Fragments.
现在要修复,您必须处理导入的问题.
Now to fix the issue you have to handle your imports.
使用import android.app.Fragment
代替import android.support.v4.app.Fragment
或者按照建议的修改进行操作;使用支持片段管理器更新应用程序的主要内容,如下所示:FragmentManager fragmentManager = getSupportFragmentManager()
.但是然后,您还必须更改FragmentManager本身的类型. import android.app.FragmentManager
至import android.support.v4.app.FragmentManager;
Or do as Modge suggested; Update the main content of your app with a support Fragment manager like this: FragmentManager fragmentManager = getSupportFragmentManager()
. But then you also have to change the type of the FragmentManager itself; import android.app.FragmentManager
to import android.support.v4.app.FragmentManager;
这篇关于obj Fragment错误的第二个参数类型发现为"Android.support.V4.app.Fragment".必需的"Android.app.Fragment"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!