-3

我一直在通过堆栈溢出进行搜索,但似乎找不到有关此问题的一些有用的信息。 下面我附加了Home Activity的代码,有,和它的XML文件。我似乎无法解决问题所在,我不知道自己做错了什么。我想显示第三个类的内容(例如,我的每个片段都有一个不同的Fragment类,基本上我希望能够在家庭活动中显示同一个片段持有者中的所有片段。在这种情况下我试图打开片段书签(men.bookmarks)..在家庭活动中打开一个片段

任何建议家伙?

我并没有包括在片段中的代码,这将是一个很大的类的话,但如果你需要的话,告诉我:) ..

XML file for my HomeActivity: 
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:openDrawer="start" > 


<include 
    layout="@layout/app_bar_home" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_home" 
    app:menu="@menu/activity_home_drawer" /> 

<fragment 
    android:name="com.nooriandroid.n007.mybookmarks_v1.Fragment_Bookmarks" 
    android:id="@+id/fragBookmarks" 
    android:layout_weight="2" 
    android:layout_width="25dp" 
    android:layout_height="match_parent" /> 

</android.support.v4.widget.DrawerLayout> 

package com.nooriandroid.n007.mybookmarks_v1; 
    import android.app.Fragment; 
    import android.app.FragmentManager; 
    import android.app.FragmentTransaction; 
    import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.NavigationView; 
import android.support.design.widget.Snackbar; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.io.File; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Activity_Home extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 

    //--------------Variables---------------------// 
    private String date_pattern = "hh:mm dd-MM-yyyy"; 
    private Fragment fragment_bookmarks; 
    private Fragment_Favorite fragment_favorite; 
    private Fragment_Category fragment_category; 
    private Fragment_SharedWith_me fragment_sharedWith_me; 
    private Fragment_Myshared fragment_myshared; 
    private Activity_Home homeActivity; 
    private Fragment_Item_Container fragment_item_container; 

    private User user; 
    private boolean frag_favorite_visible = false, frag_bookmark_visible = false, frag_category_visible = false, 
      frag_myshared_visible = false, frag_sharedwithme__visible = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     //---------------Customized------------------// 
     setTitle("Home"); 
     ActionBar ab = getSupportActionBar(); 
     ab.setLogo(R.mipmap.ic_logolight); 
     ab.setDisplayUseLogoEnabled(true); 
     ab.setDisplayShowHomeEnabled(true); 

     fragment_favorite = new Fragment_Favorite(); 
     fragment_bookmarks = new Fragment_Bookmarks(); 
     fragment_category = new Fragment_Category(); 
     fragment_myshared = new Fragment_Myshared(); 
     fragment_sharedWith_me = new Fragment_SharedWith_me(); 
     fragment_item_container = new Fragment_Item_Container(); 
     homeActivity = this; 

     FragmentManager fragmentManager = getFragmentManager(); 
     final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.add(R.id.fragment_container, fragment_favorite); 
     fragmentTransaction.add(R.id.fragment_container, fragment_bookmarks); 
     fragmentTransaction.add(R.id.fragment_container, fragment_category); 
     fragmentTransaction.add(R.id.fragment_container, fragment_myshared); 
     fragmentTransaction.add(R.id.fragment_container, fragment_sharedWith_me); 
     frag_favorite_visible = true; 
     fragmentTransaction.hide(fragment_bookmarks); 
     fragmentTransaction.hide(fragment_category); 
     fragmentTransaction.hide(fragment_myshared); 
     fragmentTransaction.hide(fragment_sharedWith_me); 
     fragmentTransaction.commit(); 

     goHomeOnclicked(); 

     user = new User(); 
     user = (User) getIntent().getSerializableExtra("currentuser"); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.home, menu); 
     rundUserSettings(); 
     SimpleDateFormat format = new SimpleDateFormat(date_pattern); 
     String current_date = format.format(new Date()); 

     TextView nav_textview_Date = (TextView) findViewById(R.id.textView_Date); 
     nav_textview_Date.setText(current_date); 
     TextView nameLast_textView = (TextView) findViewById(R.id.textView_UsernameLastname); 
     nameLast_textView.setText("" + user.getName() + " " + user.getLast_name()); 

     return true; 

    } 


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

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 
     if (id == R.id.men_newItem) { 
      Intent intent_NewItem = new Intent("com.nooriandroid.n007.mybookmarks_v1.Activity_NewItem"); 
      startActivity(intent_NewItem); 

     } else if (id == R.id.men_bookmarks) { 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      checkFragmentsStatus(fragmentTransaction); 
      fragmentTransaction.show(fragment_bookmarks); 
      frag_bookmark_visible = true; 
      this.setTitle("Bookmarks"); ///Ombytnings Zirt 
      fragmentTransaction.commit(); /// 


     } else if (id == R.id.men_category) { 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      checkFragmentsStatus(fragmentTransaction); 
      frag_category_visible= true; 
      fragmentTransaction.show(fragment_category); 
      fragmentTransaction.commit(); 
      this.setTitle("Categories "); 

      Toast.makeText(Activity_Home.this,"Not implemented yet.!",Toast.LENGTH_SHORT).show(); 
     } 
     else if (id == R.id.men_share) { 
      Toast.makeText(Activity_Home.this,"Not implemented yet.!",Toast.LENGTH_SHORT).show(); 

     } else if (id == R.id.men_sharedwithme) { 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      checkFragmentsStatus(fragmentTransaction); 
      frag_sharedwithme__visible = true; 
      fragmentTransaction.show(fragment_sharedWith_me); 
      fragmentTransaction.commit(); 
      this.setTitle("Shared with me"); 
      Toast.makeText(Activity_Home.this,"Not implemented yet.!",Toast.LENGTH_SHORT).show(); 
     } else if (id == R.id.men_myshared) { 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      checkFragmentsStatus(fragmentTransaction); 
      frag_myshared_visible = true; 
      fragmentTransaction.show(fragment_myshared); 
      fragmentTransaction.commit(); 
      this.setTitle("My shared"); 
      Toast.makeText(Activity_Home.this,"Not implemented yet.!",Toast.LENGTH_SHORT).show(); 
     } 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

    private void checkFragmentsStatus(FragmentTransaction fragmentTransaction){ 
     if (frag_favorite_visible){ 
      frag_favorite_visible = false; 
      fragmentTransaction.hide(fragment_favorite); 
     }else if (frag_bookmark_visible){ 
      frag_bookmark_visible = false; 
      fragmentTransaction.hide(fragment_bookmarks); 
     }else if (frag_category_visible){ 
      frag_category_visible = false; 
      fragmentTransaction.hide(fragment_category); 
     }else if (frag_myshared_visible){ 
      frag_myshared_visible = false; 
      fragmentTransaction.hide(fragment_myshared); 
     }else if (frag_sharedwithme__visible){ 
      frag_sharedwithme__visible = false; 
      fragmentTransaction.hide(fragment_sharedWith_me); 
     } 
    } 

    private void goHomeOnclicked(){ 
     findViewById(R.id.toolbar).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (!frag_favorite_visible){ 
        FragmentManager fragmentManager = getFragmentManager(); 
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
        checkFragmentsStatus(fragmentTransaction); 
        frag_favorite_visible = true; 
        fragmentTransaction.show(fragment_favorite); 
        fragmentTransaction.commit(); 
        homeActivity.setTitle("Home"); 
       } 
      } 
     }); 
    } 

    private boolean rundUserSettings(){ 
     if (this.user!=null){ 
      try { 
       File file = new File(user.getProfile_pic()); 
       Uri uri = Uri.fromFile(file); 
       ImageView view = (ImageView) findViewById(R.id.imageView_ProfilePic); 
       view.setImageURI(uri); 

      }catch (Exception e){ 
       Toast.makeText(Activity_Home.this,"Unable to load profile picture.!",Toast.LENGTH_SHORT).show(); 
      } 
      return true; 
     } else { 
      return false; 
     } 
    } 
    } 
+0

非常有限的方法为相同的活动添加不同的片段 –

+0

远远不够我们筛选的许多代码。请浓缩您的问题 – Alex

+1

错误是什么? –

回答

1

你用于在同一活动中添加不同片段的代码真的搞砸了。你可以使用更好的方法。我添加下面的示例代码:

在活动的布局,加入这行代码

<FrameLayout 
     android:id="@+id/fragBookmarks" 
     android:layout_weight="2" 
     android:layout_width="25dp" 
     android:layout_height="match_parent" /> 

代替:

<fragment 
android:name="com.nooriandroid.n007.mybookmarks_v1.Fragment_Bookmarks" 
android:id="@+id/fragBookmarks" 
android:layout_weight="2" 
android:layout_width="25dp" 
android:layout_height="match_parent" /> 

现在写在你的HomeActivity此方法来添加不同的片段

public void addFragment(Fragment frag, String tag) { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragBookmarks, frag, tag); 
    transaction.addToBackStack(getFragmentManager().getBackStackEntryCount() == 0 ? "FirstFragment" : null).commit(); 
    } 
} 

此方法将帮助您将任何片段添加到此活动的 走。您不需要从头开始添加所有片段。喜欢如果现在我在HomeFragment上,并且我想在Home中打开按钮上的BookmarkFragment,我会写出类似于;

btnBookmark.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ((HomeActivity) getActivity()).addFragment(new BookmarkFragment(), BookmarkFragment.class.getSimpleName()); // This will add the new fragment Bookmark fragment to the activity while adding it to backstack 
     } 
    }); 

现在,如果你想要去的BookmarkFragment到HomeFragment回来,在你HomeActivity

public void popFragment() { 
    if (getFragmentManager() == null) 
     return; 
    getFragmentManager().popBackStack(); 
} 

添加该方法并调用BookmarkFragment这样的功能,

btnBack.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ((HomeActivity) getActivity()).popFragment(); // This will remove the last added fragment Bookmark fragment 
     } 
    }); 
+0

非常感谢您的快速回复。请立即尝试并立即报告:) – abmy

+0

由于其他问题仍然缺少,但会回来.. 显然我甚至不能做到这一点,因为我的声誉如此之低? – abmy

+0

谢谢。得到它工作:)! – abmy

0

DrawerLayout应该只有两个直接children.If要在同一个活动,更换不同的片段,在你的活动创建的app_bar_home layout.Then一个FrameLayout里,这样做是为了替换片段。

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction transaction = fragmentManager.beginTransaction(); 
transaction.replace(R.id.frame_layout_id,new yourFragment()).commit(); 
+0

好吧,我可能会有很多不必要的代码行,但会尝试查看您的示例并回报:) – abmy