SplashScreen Activity onClick 打开 MainActivity 并替换 Activity 的片段容器中的片段
SplashScreen Activity onClick to open MainActivity and replace fragment in that Activity's fragment container
你好,这个真的很挣扎,因此我在寻找解决方案一整天但没有运气后的第一个 post。
我有一个启动画面,它有一个带有 onClickListener 的 ImageView,单击它可以很好地打开我的 MainActivity:
SplashActivity.java
bookMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
}
但是我想要实现的是,当单击按钮时,它会打开我的 MainActivity,但是用另一个片段替换 MainActivity 中的 fragment_container(这就是我的底部导航栏的工作方式).
这是 MainActivity 中的代码,它在单击导航按钮时处理片段替换,本质上我希望启动画面的单击打开 "BookFragment" 而不是直接转到 "RoomsFragment":
MainActivity.java
public class MainActivity extends AppCompatActivity {
//STANDARD ON CREATE OPEN TO LOAD INITIAL LAYOUT
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//THIS CREATES A BLANK CONTAINER FOR EACH FRAGMENT YOU CREATE TO GO IN
if (findViewById(R.id.fragment_container) != null) {
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
// Create a new Fragment to be placed in the activity layout
RoomsFragment firstFragment = new RoomsFragment();
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
//THIS CREATES THE NAV BAR AND TELLS WHAT FRAGMENT TO PUT IN THE CONTAINER WHEN A TAB IS SELECTED
BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar);
bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelected(@IdRes int tabId) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
//TAB1 - THE DEFAULT TAB
if (tabId == R.id.tab_rooms) {
RoomsFragment newFragment = new RoomsFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
//TAB2
} else if (tabId == R.id.tab_shisha) {
// THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
ShishaFragment newFragment = new ShishaFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
//TAB3
} else if (tabId == R.id.tab_cocktails) {
// THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
CocktailsFragment newFragment = new CocktailsFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
//TAB4
} else if (tabId == R.id.tab_food) {
// THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
FoodFragment newFragment = new FoodFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
//TAB5
} else if (tabId == R.id.tab_book) {
// THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
BookFragment newFragment = new BookFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
});
更正工作 SplashActivity.java:
在onCreate方法中:
//ONCLICK LISTENER FOR THE ENTER BUTTON AND BOOK BUTTON ON SPLASH PAGE
Button enterButton = (Button) findViewById(R.id.enter_button);
enterButton.setOnClickListener(SplashActivity.this);
Button bookButton = (Button) findViewById(R.id.book_button);
bookButton.setOnClickListener(SplashActivity.this);
}
public void onClick(View v) {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
switch (v.getId()) {
case R.id.enter_button:
startActivity(intent);
break;
case R.id.book_button:
intent.putExtra("source","onClick");
startActivity(intent);
break;
default:
break;
}
}
更正工作 MainActivity.java
onCreate方法中(输入与您相关的bottomBar的tab位置):
Intent intent = getIntent();
String source = intent.getStringExtra("source");
if (source != null && source.equals("onClick")) {
bottomBar.selectTabAtPosition(4);
}
祝你好运!
因为你用这个:
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
它将显示 firstFragment
默认值
你可以试试这个:
在 Spalsh Activity
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
为意图添加一些参数
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.putExtra("source","onClick"); //add like this line
startActivity(intent);
主要Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
```your code
Intent intent = getIntent();
String source = intent.getStringExtra("source");
if (source.equals("onClick")) {
bottomBar.onTabSelected(R.id.tab_book);
}
}
当 Main Activity 接受参数 source
并且 source
值是您的设置时,它将 运行 if
[= 中的代码18=]
你好,这个真的很挣扎,因此我在寻找解决方案一整天但没有运气后的第一个 post。
我有一个启动画面,它有一个带有 onClickListener 的 ImageView,单击它可以很好地打开我的 MainActivity:
SplashActivity.java
bookMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
}
但是我想要实现的是,当单击按钮时,它会打开我的 MainActivity,但是用另一个片段替换 MainActivity 中的 fragment_container(这就是我的底部导航栏的工作方式).
这是 MainActivity 中的代码,它在单击导航按钮时处理片段替换,本质上我希望启动画面的单击打开 "BookFragment" 而不是直接转到 "RoomsFragment":
MainActivity.java
public class MainActivity extends AppCompatActivity {
//STANDARD ON CREATE OPEN TO LOAD INITIAL LAYOUT
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//THIS CREATES A BLANK CONTAINER FOR EACH FRAGMENT YOU CREATE TO GO IN
if (findViewById(R.id.fragment_container) != null) {
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
// Create a new Fragment to be placed in the activity layout
RoomsFragment firstFragment = new RoomsFragment();
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
//THIS CREATES THE NAV BAR AND TELLS WHAT FRAGMENT TO PUT IN THE CONTAINER WHEN A TAB IS SELECTED
BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar);
bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelected(@IdRes int tabId) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
//TAB1 - THE DEFAULT TAB
if (tabId == R.id.tab_rooms) {
RoomsFragment newFragment = new RoomsFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
//TAB2
} else if (tabId == R.id.tab_shisha) {
// THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
ShishaFragment newFragment = new ShishaFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
//TAB3
} else if (tabId == R.id.tab_cocktails) {
// THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
CocktailsFragment newFragment = new CocktailsFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
//TAB4
} else if (tabId == R.id.tab_food) {
// THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
FoodFragment newFragment = new FoodFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
//TAB5
} else if (tabId == R.id.tab_book) {
// THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
BookFragment newFragment = new BookFragment();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
});
更正工作 SplashActivity.java:
在onCreate方法中:
//ONCLICK LISTENER FOR THE ENTER BUTTON AND BOOK BUTTON ON SPLASH PAGE
Button enterButton = (Button) findViewById(R.id.enter_button);
enterButton.setOnClickListener(SplashActivity.this);
Button bookButton = (Button) findViewById(R.id.book_button);
bookButton.setOnClickListener(SplashActivity.this);
}
public void onClick(View v) {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
switch (v.getId()) {
case R.id.enter_button:
startActivity(intent);
break;
case R.id.book_button:
intent.putExtra("source","onClick");
startActivity(intent);
break;
default:
break;
}
}
更正工作 MainActivity.java
onCreate方法中(输入与您相关的bottomBar的tab位置):
Intent intent = getIntent();
String source = intent.getStringExtra("source");
if (source != null && source.equals("onClick")) {
bottomBar.selectTabAtPosition(4);
}
祝你好运!
因为你用这个:
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
它将显示 firstFragment
默认值
你可以试试这个:
在 Spalsh Activity
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
为意图添加一些参数
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.putExtra("source","onClick"); //add like this line
startActivity(intent);
主要Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
```your code
Intent intent = getIntent();
String source = intent.getStringExtra("source");
if (source.equals("onClick")) {
bottomBar.onTabSelected(R.id.tab_book);
}
}
当 Main Activity 接受参数 source
并且 source
值是您的设置时,它将 运行 if
[= 中的代码18=]