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();
}
}