android - 如何从 Fragment 返回到 Fragment?

标签 android android-fragments

当我点击后退按钮时,我如何转到上一个 fragment 。

RecyclerAdapter_1_ten.java

public class RecyclerAdapter_1_ten extends RecyclerView.Adapter<RecyclerAdapter_1_ten.ViewHolder> {

private String[] SubTxt = {"NCERT Solution",
        "Notes"};

private int[] SubImage = {R.drawable.ic_answers_black_48dp,
        R.drawable.ic_notes_black_48dp};

Activity activity;
public RecyclerAdapter_1_ten(Activity activity) {
    this.activity = activity;
}

class ViewHolder extends RecyclerView.ViewHolder {

    public int currentItem;
    public ImageView itemImage;
    public TextView itemTitle;


    public ViewHolder(View itemView) {
        super(itemView);
        itemImage = (ImageView) itemView.findViewById(R.id.SubImage);
        itemTitle = (TextView) itemView.findViewById(R.id.SubTxt);


        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();

                switch (position) {
                    case 0:
                        android.app.FragmentManager fm = activity.getFragmentManager();
                        fm.beginTransaction().replace(R.id.content_frame, new SecondClass_10()).commit();
                    case 1:
                        Snackbar.make(v, "Comming Soon " + position,
                                Snackbar.LENGTH_LONG)
                                .setAction("Action", null).show();

                }

            }
        });
    }
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.recycler_1_9, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    viewHolder.itemTitle.setText(SubTxt[i]);
    viewHolder.itemImage.setImageResource(SubImage[i]);
}

@Override
public int getItemCount() {
    return SubTxt.length;
}
}

SecondClass_10.java

public class SecondClass_10 extends Fragment {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
RecyclerView.Adapter adapter;
View rootview;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootview = inflater.inflate(R.layout.second_class_10, container, false);
    recyclerView = (RecyclerView) rootview.findViewById(R.id.recycler_ten_page_second);

    layoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(layoutManager);

    adapter = new RecyclerAdapter_2_ten();
    recyclerView.setAdapter(adapter);
    return rootview;
}
}

主 Activity .java

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    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.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    android.app.FragmentManager fm = getFragmentManager();
    fm.beginTransaction().replace(R.id.content_frame, new FirstClass_9()).commit();
}

@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.main, menu);
    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.
    android.app.FragmentManager fn = getFragmentManager();
    int id = item.getItemId();

    if (id == R.id.nav_9) {
        fn.beginTransaction().replace(R.id.content_frame, new FirstClass_9()).commit();

    } else if (id == R.id.nav_10) {
        fn.beginTransaction().replace(R.id.content_frame, new FirstClass_10()).commit();

    } else if (id == R.id.nav_11) {
        fn.beginTransaction().replace(R.id.content_frame, new FirstClass_11()).commit();

    } else if (id == R.id.nav_12) {
        fn.beginTransaction().replace(R.id.content_frame, new FirstClass_12()).commit();

    } else if (id == R.id.nav_aboutUs) {


    } else if (id == R.id.nav_feedback) {


    }
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}



}

我遵循了很多教程,但我没有得到解决方案希望我能在这里得到答案。我添加了 recyclerview,当我点击它时它会打开 fragment ,但是当我点击后退按钮而不是返回时它会转到第一页。

当我点击返回按钮时,如何从 Fragment 返回到 Fragment?

最佳答案

您可以使用 Stack 来保存 fragment 实例。当您移动到下一个 fragment 时,将 fragment 插入堆栈并将其与 Activity 分离,然后在 onbackpressed 事件中弹出 fragment 并将其附加到 Activity 。

关于android - 如何从 Fragment 返回到 Fragment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39085292/

相关文章:

java - 显示居中对齐的 Web View

android - Fragment OnResume 未在 backpress 上调用

android - 非法参数异常 : No view found for id 0x7f07003c for fragment

android - MainActivity 类型未定义方法 getFragmentManager()

android-fragments - android - 对多个 Activity 使用相同的片段

android - 如何知道 fragment 是否已经调用了 onCreateView()

android - 无法让无线 ADB 工作 - 移除 USB 电缆将断开 TCPIP 设备

android - 如何检测 Google Play 购买是从测试帐户还是普通帐户进行的

android - 单击时刷新按钮的标签

java - 将Gradle项目依赖项编译为Android库Arr