Android 在替换这个片段时,GUI显示什么也没有,但仍然在替换片段,并且没有崩溃

Android 在替换这个片段时,GUI显示什么也没有,但仍然在替换片段,并且没有崩溃,android,fragmenttransaction,Android,Fragmenttransaction,因为这是我的主要活动 package com.appshep.fbalbumdownloader.activities; public class ProfileActivity extends AppCompatActivity implements ProfileListener { @Bind(R.id.tabs) TabLayout tabLayout; @Bind(R.id.viewpager) ViewPager viewPager; AccessToken token; pri

因为这是我的主要活动

package com.appshep.fbalbumdownloader.activities;
public class ProfileActivity extends AppCompatActivity implements ProfileListener {

@Bind(R.id.tabs)
TabLayout tabLayout;
@Bind(R.id.viewpager)
ViewPager viewPager;

AccessToken token;
private String imageURL;
private String userID;
private String userName;
GraphRequest graphRequest;
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);
    //initialization
    ButterKnife.bind(this);
    token=AccessToken.getCurrentAccessToken();
    userID=token.getUserId();

    graphRequest= new GraphRequest(token, "/me", null, HttpMethod.GET, new GraphRequest.Callback() {
        @Override
        public void onCompleted(GraphResponse graphResponse) {
            try
            {
                if(graphResponse!=null)
                {

                    JSONObject obj = graphResponse.getJSONObject();
                    userName= obj.getString("name");
                    imageURL = "https://graph.facebook.com/" + userID
                            + "/picture?height=100&width=100";
                    DownloadManager manager= new DownloadManager(ProfileActivity.this);
                   //hack created
                   // manager.setStr(imageURL);
                    manager.execute(imageURL);
                }
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
    });
    graphRequest.executeAsync();


    //Define the number of tabs by setting appropriate fragment and tab name.
    setupViewPager(viewPager);
    tabLayout.setupWithViewPager(viewPager);
}

private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new LoggedinFragment(), "Home");
        adapter.addFragment(new MyVideosFragment(), "Videos");
        adapter.addFragment(new TwoFragment(), "TWO");
        adapter.addFragment(new ThreeFragment(), "THREE");
        viewPager.setAdapter(adapter);

}


@Override
public void onSuccess(final Bitmap bitmap) {

    Bitmap output=getRoundedCornerBitmap(bitmap);
    ImageView imageView=(ImageView)findViewById(R.id.profile_pic);
    imageView.setImageBitmap(output);

}

@Override
public void onFailure(String string) {

}

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
            bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = 95;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);

    return output;
}
}

这是我想用我的第一个片段替换的片段,我是通过编程而不是通过布局中的片段小部件创建的

    public class GridOfPictures extends Fragment {

//Empty constructor is required
public GridOfPictures() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView=inflater.inflate(R.layout.grid_of_pictures,container, false);
    //Fetch that GridView
    GridView gridView=(GridView) rootView.findViewById(R.id.gridView);
    //Use rootView to get context instead of getActivity()
    gridView.setAdapter( new ImageAdapter(rootView.getContext()));

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                                int position, long id) {
            Toast.makeText(getActivity(), "" + position,
                    Toast.LENGTH_SHORT).show();
        }
    });
    return rootView;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
}
}

尝试使用容器来存放碎片。创建一个新片段,如下所示:
my_container.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
这将是保存碎片的容器。替换容器内的碎片的工作方式如下:

public void replaceFragment()
{
    try
    {

        fragmentGrid= new GridOfPictures();

        manager=getFragmentManager();
        transaction=manager.beginTransaction();

        transaction.replace(R.id.myContainer, fragmentGrid, "My Albums");

        transaction.commit();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

替换片段的要求在哪里?我只是没有在这里提到代码。但是已经在片段中写入了。您需要将该代码放在这里实际的classpublic void getButton(视图){loadAlbums=(Button)View.findViewById(R.id.my_photos_btn);loadAlbums.setOnClickListener(this);}这就是您要求的函数。它具有启动onClickListener的调用。您尝试过调试它吗?我尝试过使用这种方法。但这会让我崩溃。因为我在主活动布局中使用了ViewPager和工具栏标记。我以编程方式创建了这些片段,它们的布局由RelativeLayout中的不同小部件组成。无法切换到这种方法。请告诉我为什么我要替换一个空白片段。你能发布截图吗?或者你可以发布由这种方法导致的崩溃日志。现在您可以看到了。@HafizaSaniaSaleem如果您想用另一个片段完全替换viewpager,那么您需要在容器中传递一个包含viewpager的片段(如我在回答中所示)。检查时间表片段。我有一个片段,里面有一个viewpager。我把片段放在一个容器中,viewpager的孩子们也是片段。单击子项中的一个项将在viewpager顶部添加一个新片段。
public class ImageAdapter extends BaseAdapter {
private Context context;
//Reference to our images
private Integer[] thumbIDs= {R.drawable.bride,R.drawable.images,R.drawable.feet,
                             R.drawable.tech, R.drawable.islamic, R.drawable.bangles};

public ImageAdapter(Context context) {
    this.context = context;
}

@Override
public int getCount() {
    return thumbIDs.length;
}

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return 0;
}

// create a new ImageView for each item referenced by the Adapter
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
    ImageView imageView;
    if(convertView==null)
    {
        imageView = new ImageView(context);
        imageView.setLayoutParams(new GridView.LayoutParams(320, 320));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(1, 1, 1, 1);

    }
    else
    {
        imageView=(ImageView)convertView;
    }
    imageView.setImageResource(thumbIDs[i]);
    return imageView;
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
public class MyFragmentContainer extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle savedInstanceState)
{
    View view=inflater.inflate(R.layout.my_container,parent,false);

    FragmentManager fm=getFragmentManager();
    android.support.v4.app.Fragment fragment =new LoggedInFragment();
    fm.beginTransaction().add(R.id.myContainer,fragment).commit();

    return view;
}
}
public void replaceFragment()
{
    try
    {

        fragmentGrid= new GridOfPictures();

        manager=getFragmentManager();
        transaction=manager.beginTransaction();

        transaction.replace(R.id.myContainer, fragmentGrid, "My Albums");

        transaction.commit();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}