2 qq 32793555 qq_32793555 于 2017.09.17 11:31 提问

郭霖 的第一行代码书本上面第四章碎片的问题 求大神

package com.example.myapplication;

import android.os.Bundle;
import android.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(this);
    replaceFragment(new RightFragment());
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button:
            replaceFragment(new AnotherRightFragment());
            break;
        default:
            break;
    }
}
private void replaceFragment(Fragment fragment){
    FragmentManager fragmentMananger = getSupportFragmentManager();
    FragmentTransaction transaction = fragmentMananger.beginTransaction();
    transaction.replace(R.id.right_fragment,fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

}
图片说明

package com.example.myapplication;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(this);
    replaceFragment(new RightFragment());
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button:
            replaceFragment(new AnotherRightFragment());
            break;
        default:
            break;
    }
}
private void replaceFragment(Fragment fragment){
    FragmentManager fragmentMananger = getSupportFragmentManager();
    FragmentTransaction transaction = fragmentMananger.beginTransaction();
    transaction.replace(R.id.right_fragment,fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

}

图片说明

两种导入包都出现了错误,求大神解决。

3个回答

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2017.09.17 12:11

调用 getSupportFragmentManager ,这个方法获取的v4包里的FragmentManager ,所以后面的Fragment当然要使用v4包的Fragment。

你检查下你的RightFragment 和 AnotherRightFragment是否都是继承v4包的Fragment。

或者你不使用v4包,就不要调用getSupportFragmentManager,直接使用getFragmentManager

qq_32793555
qq_32793555 我把每个类的Fragment的包名都改成V4就解决了,还没试过你的方法能不能用,不过还是谢谢你。
2 个月之前 回复
as_csdn
as_csdn   2017.09.17 17:49

楼上仁兄说得很对,fragment的包一定要保持一致,是v4就全是v4

qq_27969037
qq_27969037   Rxr 2017.09.18 08:55

你的一个v4下面的,一个是v7下面的,是不匹配造成的,

Csdn user default icon
上传中...
上传图片
插入图片