如何意图进入特定的标签片段?
How to Intent into specific Tab Fragment?
有两个 Activity:MainActivity 和 LoginActivity。我也有一个Fragment,名字是TabFragment(有一个TabLayout),它的parent是MainActivity。我怎样才能从我的登录 Activity.
进入特定的 TabFragment
这是我的主Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
id = getIntent().getStringExtra("id");
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.confrag, new FragmentUtama()).commit();
getSupportFragmentManager().beginTransaction().replace(R.id.confrag, new TabFragment()).commit();
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
sharedPreferences = getSharedPreferences("login.conf", MODE_PRIVATE);
editor = sharedPreferences.edit();
String username = sharedPreferences.getString("username", "");
String password = sharedPreferences.getString("password", "");
Log.d(TAG, "Username:"+username+"\npassword:"+password);
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);
}
这是我的标签片段:
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.viewpager, null);
tabLayout = (TabLayout)view.findViewById(R.id.tabs);
viewPager = (ViewPager)view.findViewById(R.id.viewpager);
viewPager.setAdapter(new Adapterbaru(getChildFragmentManager()));
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
return view;
}
public interface OnFragmentInteractionListener {
void onFragmentInteraction(Uri uri);
}
public class Adapterbaru extends FragmentPagerAdapter{
public Adapterbaru(FragmentManager fm){
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0 : {
return new Fragmentone();
}
case 1 : {
return new FragmentTwo();
}
case 2 : {
return new Fragmenttree();
}
}
return null;
}
@Override
public int getCount() {
return jumlah_tab;
}
@Override
public CharSequence getPageTitle(int position) {
switch(position){
case 0 : {
return "First";
}
case 1 : {
return "Second";
}
case 2 : {
return "Third";
}
}
return null;
}
您可以查看为
if(isFromLogin){
viewpager.setCurrentItem(specificFragmentPosition);
}
编码愉快!
viewpager.setCurrentItem(posotion);
从您的 LoginActivity 传递这样的 Intents
在LoginActivity.class
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("Fragmentone", 0); //pass zero for Fragmentone.
startActivity(intent);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("FragmentTwo", 1); //pass zero for FragmentTwo.
startActivity(intent);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("FragmentThree", 2); //pass zero for FragmentThree.
startActivity(intent);
在MainActivity.class
int value = getIntent().getIntExtra("Fragmentone", 0);
来自你的 activity 这样的传球
Bundle bundle = new Bundle();
bundle.putString("key", value);
FragmentOne fragmentOne = new FragmentOne();
fragmentOne.setArguments(bundle);
在 Fragment 的 oncreateView 中请定义这个
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int strtext = getArguments().getInt("key");
return inflater.inflate(R.layout.fragment, container, false);
}
从您的 LoginActivity
,将选项卡片段 (FragmentOne, FragmentTwo, FragmentThree)
id 作为 0, 1, 2
传递到 Intent
。
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("FRAGMENT_ID", 0);
startActivity(intent);
在您的 MainActivity
中,从 Intent
获取片段 ID
// Inside OnCreate()
int fragmentId = getIntent().getIntExtra("FRAGMENT_ID", 0);
从 MainActivity
,使用 FragmentManager
显示 TabFragment
并将 fragmentId
传递给 TabFragment
使用 Bundle
// Inside OnCreate()
Bundle bundle = new Bundle();
bundle.putString("TARGET_FRAGMENT_ID", fragmentId);
TabFragment tabFragment = new TabFragment();
tabFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.confrag, tabFragment).commit();
在TabFragment
中,从Bundle
获取目标片段(FragmentOne, FragmentTwo, FragmentThree)
id,最后使用[=显示所需的片段29=]方法。
// Inside OnCreateView()
int position = getArguments().getInt("TARGET_FRAGMENT_ID");
viewpager.setCurrentItem(position);
希望对你有所帮助~
有两个 Activity:MainActivity 和 LoginActivity。我也有一个Fragment,名字是TabFragment(有一个TabLayout),它的parent是MainActivity。我怎样才能从我的登录 Activity.
进入特定的 TabFragment这是我的主Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
id = getIntent().getStringExtra("id");
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.confrag, new FragmentUtama()).commit();
getSupportFragmentManager().beginTransaction().replace(R.id.confrag, new TabFragment()).commit();
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
sharedPreferences = getSharedPreferences("login.conf", MODE_PRIVATE);
editor = sharedPreferences.edit();
String username = sharedPreferences.getString("username", "");
String password = sharedPreferences.getString("password", "");
Log.d(TAG, "Username:"+username+"\npassword:"+password);
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);
}
这是我的标签片段:
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.viewpager, null);
tabLayout = (TabLayout)view.findViewById(R.id.tabs);
viewPager = (ViewPager)view.findViewById(R.id.viewpager);
viewPager.setAdapter(new Adapterbaru(getChildFragmentManager()));
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
return view;
}
public interface OnFragmentInteractionListener {
void onFragmentInteraction(Uri uri);
}
public class Adapterbaru extends FragmentPagerAdapter{
public Adapterbaru(FragmentManager fm){
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0 : {
return new Fragmentone();
}
case 1 : {
return new FragmentTwo();
}
case 2 : {
return new Fragmenttree();
}
}
return null;
}
@Override
public int getCount() {
return jumlah_tab;
}
@Override
public CharSequence getPageTitle(int position) {
switch(position){
case 0 : {
return "First";
}
case 1 : {
return "Second";
}
case 2 : {
return "Third";
}
}
return null;
}
您可以查看为
if(isFromLogin){
viewpager.setCurrentItem(specificFragmentPosition);
}
编码愉快!
viewpager.setCurrentItem(posotion);
从您的 LoginActivity 传递这样的 Intents
在LoginActivity.class
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("Fragmentone", 0); //pass zero for Fragmentone.
startActivity(intent);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("FragmentTwo", 1); //pass zero for FragmentTwo.
startActivity(intent);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("FragmentThree", 2); //pass zero for FragmentThree.
startActivity(intent);
在MainActivity.class
int value = getIntent().getIntExtra("Fragmentone", 0);
来自你的 activity 这样的传球
Bundle bundle = new Bundle();
bundle.putString("key", value);
FragmentOne fragmentOne = new FragmentOne();
fragmentOne.setArguments(bundle);
在 Fragment 的 oncreateView 中请定义这个
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int strtext = getArguments().getInt("key");
return inflater.inflate(R.layout.fragment, container, false);
}
从您的
LoginActivity
,将选项卡片段(FragmentOne, FragmentTwo, FragmentThree)
id 作为0, 1, 2
传递到Intent
。Intent intent = new Intent(LoginActivity.this, MainActivity.class); intent.putExtra("FRAGMENT_ID", 0); startActivity(intent);
在您的
获取片段 IDMainActivity
中,从Intent
// Inside OnCreate() int fragmentId = getIntent().getIntExtra("FRAGMENT_ID", 0);
从
MainActivity
,使用FragmentManager
显示TabFragment
并将fragmentId
传递给TabFragment
使用Bundle
// Inside OnCreate() Bundle bundle = new Bundle(); bundle.putString("TARGET_FRAGMENT_ID", fragmentId); TabFragment tabFragment = new TabFragment(); tabFragment.setArguments(bundle); getSupportFragmentManager().beginTransaction().replace(R.id.confrag, tabFragment).commit();
在
TabFragment
中,从Bundle
获取目标片段(FragmentOne, FragmentTwo, FragmentThree)
id,最后使用[=显示所需的片段29=]方法。// Inside OnCreateView() int position = getArguments().getInt("TARGET_FRAGMENT_ID"); viewpager.setCurrentItem(position);
希望对你有所帮助~