如何从Android中的片段单击按钮打开片段
Posted
技术标签:
【中文标题】如何从Android中的片段单击按钮打开片段【英文标题】:How to open a Fragment on button click from a fragment in Android 【发布时间】:2015-12-18 11:36:20 【问题描述】:我的 HomeFragment 上有一些按钮,我想在从片段单击按钮时打开片段。类似导航的东西。我正在尝试使用以下代码,但没有奏效。请帮忙 !我对 android 很陌生,正在尝试学习新事物。
这是我的代码
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class HomeFragment extends Fragment
public HomeFragment()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
Button aboutBtn = (Button) rootView.findViewById(R.id.aboutusButton);
Button phonebookBtn = (Button) rootView.findViewById(R.id.phbookButton);
Button schemeBtn = (Button) rootView.findViewById(R.id.schemeButton);
Button loanBtn = (Button) rootView.findViewById(R.id.loanButton);
Button serviceBtn = (Button) rootView.findViewById(R.id.serviceButton);
Button devBtn = (Button) rootView.findViewById(R.id.devButton);
aboutBtn.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// Launching new Activity on selecting single List Item
Intent i = new Intent(getActivity(), AboutFragment.class);
startActivity(i);
);
phonebookBtn.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// Launching new Activity on selecting single List Item
Intent j = new Intent(getActivity(), PhoneBookFragment.class);
startActivity(j);
);
schemeBtn.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// Launching new Activity on selecting single List Item
Intent k = new Intent(getActivity(), HomeFragment.class);
startActivity(k);
);
loanBtn.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// Launching new Activity on selecting single List Item
Intent l = new Intent(getActivity(), RemittanceFragment.class);
startActivity(l);
);
serviceBtn.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// Launching new Activity on selecting single List Item
Intent m = new Intent(getActivity(), ServiceFragment.class);
startActivity(m);
);
devBtn.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// Launching new Activity on selecting single List Item
Intent n = new Intent(getActivity(), AboutDeveloper.class);
startActivity(n);
);
return rootView;
我正在寻找类似波纹管代码的东西,但不知道如何使代码与我的代码一起使用。
Button aboutBtn = (Button) v.findViewById(R.id.aboutButton);
aboutBtn.setOnClickListener(this);
Button homeBtn = (Button) v.findViewById(R.id.homeButton);
homeButton.setOnClickListener(this);
Button serviceBtn = (Button) v.findViewById(R.id.serviceButton);
serviceBtn.setOnClickListener(this);
@Override
public void onClick(View view)
Fragment fragment = null;
switch (view.getId())
case aboutButton:
fragment = new AboutFragment();
break;
case homeBtn:
fragment = new PhonebookFragment();
break;
case serviceBtn:
fragment = new ServiceFragment();
break;
default:
fragment = new HomeFragment();
break;
【问题讨论】:
【参考方案1】:您可以在单击按钮时使用 FragmentTransaction 替换片段。像这样的:
Fragment someFragment = new SomeFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, someFragment ); // give your fragment container id in first parameter
transaction.addToBackStack(null); // if written, this transaction will be added to backstack
transaction.commit();
了解performing fragment transactions here.
代码:
package com.rupomkhondaker.sonalibank;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class HomeFragment extends Fragment implements View.OnClickListener
public HomeFragment()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
Button aboutBtn = (Button) rootView.findViewById(R.id.aboutusButton);
Button phonebookBtn = (Button) rootView.findViewById(R.id.phbookButton);
aboutBtn.setOnClickListener(this);
phonebookBtn.setOnClickListener(this);
return rootView;
@Override
public void onClick(View view)
Fragment fragment = null;
switch (view.getId())
case R.id.aboutusButton:
fragment = new AboutFragment();
replaceFragment(fragment);
break;
case R.id.phbookButton:
fragment = new PhoneBookFragment();
replaceFragment(fragment);
break;
public void replaceFragment(Fragment someFragment)
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, someFragment);
transaction.addToBackStack(null);
transaction.commit();
【讨论】:
你能在我的代码中给我一个示例实现吗? @Firefog 请看。 @Firefog “不工作”是什么意思?它是抛出错误还是其他什么?请详细写。 fragment_container ?显示红线也每个案例显示红线 @Firefog 您需要将片段容器 ID 放在那里,正如我在评论中所写的那样。如果你不知道它在哪里,那就把你的活动的 xml 放在有问题的地方。【参考方案2】:我有一个简单的技巧!这是 MainActivity 中的代码:
Intent intent=new Intent(getApplicationContext(),Main2Activity.class);
intent.putExtra("pos",1);
startActivity(intent);
Intent intent1=new Intent(getApplicationContext(),Main2Activity.class);
intent1.putExtra("pos",2);
startActivity(intent1);
在 Main2Activity 中,它是一个带有片段的 NavigationDrawer
Bundle extras;
extras=getIntent().getExtras();
if(extras!=null)
position=extras.getInt("pos");
if(position==1)
fragment=new FragmentOne();
if(fragment !=null)
android.support.v4.app.FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.screen_area,fragment);
fragmentTransaction.commit();
if(position==2)
fragment=new FragmentTwo();
if(fragment !=null)
android.support.v4.app.FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.screen_area,fragment);
fragmentTransaction.commit();
【讨论】:
【参考方案3】:Kotlin 示例:
fun FragmentActivity.replaceFragment(fragment: Fragment, frameId: Int = R.id.fragment_container, addToStack: Boolean)
val doesFragmentAlreadyExists = supportFragmentManager.findFragmentByTag(fragment.javaClass.simpleName) != null
if (!doesFragmentAlreadyExists)
supportFragmentManager.inTransaction
if (addToStack) replace(frameId, fragment, fragment.javaClass.simpleName)
.addToBackStack(fragment.javaClass.simpleName)
else
replace(frameId, fragment, fragment.javaClass.simpleName)
【讨论】:
以上是关于如何从Android中的片段单击按钮打开片段的主要内容,如果未能解决你的问题,请参考以下文章