How to load fragment with recyclerview on start of the application? - java

I have built a bottom navigation tab bar in android,it has 5 fragments but the problem is on start of the application it doesn't load the recyclerview list from firestore database. and this fragment is Home Fragment. but if I randomly open another tab and then comes the to the home tab the home tab list loads itself, but it does not load automatically on start of the app
below is the code.
please assist
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private static final String TAG = "DocSnippets";
private FirebaseAuth mauth;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference UsersRef = db.collection("Users");
private DocumentReference noteRef = db.document("Notebook/My First Note");
private MySharedPreferences sp;
private DocumentReference currentUserRef;
private Button notificationList;
private String mUserId, tokenId, currentUserProfilePic, currentUserName, currentUserSpinnerC;
String currentUserID;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sp = MySharedPreferences.getInstance(this);
setContentView(R.layout.activity_main);
mauth = FirebaseAuth.getInstance();
// currentUserID = mauth.getCurrentUser().getUid();
UsersRef =FirebaseFirestore.getInstance().collection("Users");
mUserId = mauth.getUid();
tokenId = FirebaseInstanceId.getInstance().getToken();
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = 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 = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.bottom_nav_view);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
#Override
public boolean onNavigationItemSelected(#NonNull MenuItem item) {
Fragment fragment;
fragment = null;
switch (item.getItemId()) {
case R.id.navigation_home:
fragment = new HomeFragment();
break;
case R.id.navigation_dashboard:
fragment = new DashboardFragment();
break;
case R.id.navigation_notifications:
// Intent intent = new Intent(MainActivity.this, AddPostActivity.class);
// startActivity(intent);
fragment = new NotificationsFragment();
break;
case R.id.navigation_post:
fragment = new ProfileFragment();
break;
case R.id.navigation_postlist:
fragment = new ProfileFragment();
break;
}
return loadFragment(fragment);
}
};
private boolean loadFragment(Fragment fragment) {
//switching fragment
if (fragment != null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
return true;
}
return false;
}
#Override
protected void onStart()
{
super.onStart();
FirebaseUser currentUser = mauth.getCurrentUser();
if(currentUser == null)
{
SendUserToSignInActivity();
}
else
{
retrieveCurrentUserInfo();
checkUserExistence();
}
}
private void checkUserExistence() {
final String current_user_id = mauth.getCurrentUser().getUid();
}
private void SendUserToSignInActivity() {
Intent signInIntent = new Intent(MainActivity.this, SignInActivity.class);
signInIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(signInIntent);
finish();
}
#Override
public void onBackPressed() {
DrawerLayout drawer = 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;
}
private void retrieveCurrentUserInfo(){
currentUserRef = db.collection("users").document(mUserId);
currentUserRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
#Override
public void onComplete(#NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()){
currentUserName = (String) document.getString("username");
currentUserProfilePic =(String) document.getString("profile_pic");
currentUserSpinnerC = (String) document.getString("spinnerC");
CircleImageView UserImage = (CircleImageView) findViewById(R.id.current_user_Image);
Picasso.get()
.load(currentUserProfilePic)
.resize(50, 50)
.centerCrop()
.into(UserImage);
TextView username = (TextView) findViewById(R.id.current_user_name);
TextView spinnerC = (TextView) findViewById(R.id.current_user_spinnerC);
username.setText(currentUserName);
spinnerC.setText(currentUserSpinnerC);
}
}
}
});
}
}

The fragment is not loaded at launching your activity, so add below code in your onCreate() method
loadFragment(new HomeFragment());

You can trigger the home fragment selection manually. Paste this at the end of the onCreate function of MainActivity.
View view = navigation.findViewById(R.id.navigation_home);
view.performClick();

You are not loading/calling any fragment in your onCreate() method.
Try this way
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* Your code
*/
loadFragment(LOAD_YOUR_FRAGMENT);
}

Related

How can i keep a fragment running while the application is open with navigationbar

Hello is there any way to keep a fragment running while navigating with the navigationbar?
here is my code
public class DashActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
FirebaseAuth firebaseAuth;
ActionBar actionBar;
#Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
actionBar = getSupportActionBar();
actionBar.setTitle("Profile");
firebaseAuth = FirebaseAuth.getInstance();
BottomNavigationView navigationView = findViewById(R.id.navigation);
navigationView.setOnNavigationItemSelectedListener(selectedListener);
actionBar.setTitle("Profile");
ProfilFragment fragment2 = new ProfilFragment();
FragmentTransaction ft2 = getSupportFragmentManager().beginTransaction();
ft2.replace(R.id.content, fragment2, "");
ft2.commit();
}
private BottomNavigationView.OnNavigationItemSelectedListener selectedListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
#Override
public boolean onNavigationItemSelected(#NonNull MenuItem menuitem) {
switch (menuitem.getItemId()) {
case R.id.nav_map:
actionBar.setTitle("Map");
MapFragment fragment1 = new MapFragment();
FragmentTransaction ft1 = getSupportFragmentManager().beginTransaction();
ft1.replace(R.id.content, fragment1, "");
ft1.commit();
return true;
case R.id.nav_profile:
actionBar.setTitle("Profile");
ProfilFragment fragment2 = new ProfilFragment();
FragmentTransaction ft2 = getSupportFragmentManager().beginTransaction();
ft2.replace(R.id.content, fragment2, "");
ft2.commit();
return true;
case R.id.nav_activity:
actionBar.setTitle("Activity");
ActivityFragment fragment3 = new ActivityFragment();
FragmentTransaction ft3 = getSupportFragmentManager().beginTransaction();
ft3.replace(R.id.content, fragment3, "");
ft3.commit();
return true;
}
return false;
}
};
private void checkUserStatus() {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
} else {
startActivity(new Intent(DashActivity.this, MainActivity.class));
finish();
}
}
#Override
protected void onStart() {
checkUserStatus();
super.onStart();
}
#Override
public boolean onNavigationItemSelected(#NonNull MenuItem item) {
return false;
}
}
i have three fragment and i want them to stay running while the application is open

my intent in navigation drawer is not working

When I tap on any item of in navigation drawer ,instead of going to new activity , the drawer toggles.
MainActivity :
public class MainActivity extends AppCompatActivity {
LinearLayoutManager mLayoutManager; //for sorting
SharedPreferences mSharedPreferences; //for saving sort setting
DrawerLayout drawerLayout;
ActionBarDrawerToggle toggle;
NavigationView navigationView;
Toolbar toolbar;
RecyclerView mRecyclerView;
List<FoodData> myFoodList;
FoodData mFoodData;
MyAdapter myAdapter;
SearchView searchView;
private boolean ascending = true;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// setUpToolbar();
// getSupportActionBar().hide();
toolbar =(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//menu hooks
drawerLayout = findViewById(R.id.drawerLayout);
navigationView = findViewById(R.id.navigation_menu);
toggle = new ActionBarDrawerToggle(this, drawerLayout,toolbar,R.string.open,R.string.close);
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
mRecyclerView = (RecyclerView)findViewById(R.id.recyclerView);
searchView = findViewById(R.id.srch);
mSharedPreferences= getSharedPreferences("SortSettings", MODE_PRIVATE);
String mSorting =mSharedPreferences.getString("Sort","newest"); // where if no setting is selected newest will be default
if(mSorting.equals("newest")){
mLayoutManager = new LinearLayoutManager(this);
//this will load the items from bottom means newest first
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
}else if(mSorting.equals("oldest")){
mLayoutManager = new LinearLayoutManager(this);
//this will load the items from bottom means oldest first
mLayoutManager.setReverseLayout(false);
mLayoutManager.setStackFromEnd(false);
}
//for setting company name in the navigation drawer
// navigationView=(NavigationView)findViewById(R.id.navigation_menu);
//navigationView.setNavigationItemSelectedListener(this);
// View header = navigationView.getHeaderView(0);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
#Override
public boolean onNavigationItemSelected(#NonNull MenuItem menuItem) {
switch (menuItem.getItemId())
{
case R.id.nav_favourite:
Intent intent = new Intent(MainActivity.this, favourite.class);
startActivity(intent);
// drawerLayout.closeDrawer(GravityCompat.START);
break;
case R.id.nav_about_us:
Intent intent1 = new Intent(MainActivity.this , About_us.class);
startActivity(intent1);
// drawerLayout.closeDrawer(GravityCompat.START);
break;
case R.id.nav_rate_us:
Intent intent2 = new Intent(MainActivity.this , RateUs.class);
startActivity(intent2);
// drawerLayout.closeDrawer(GravityCompat.START);
break;
case R.id.nav_share:
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
String shareBody = "http://play.google.com/store/apps/detail?id=" + getPackageName();
String shareSub = "Try now";
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, shareSub);
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
startActivity(Intent.createChooser(sharingIntent, "Share using"));
//drawerLayout.closeDrawer(GravityCompat.START);
break;
case R.id.nav_setting:
Intent intent3 = new Intent(MainActivity.this , SettingsActivity.class);
startActivity(intent3);
// drawerLayout.closeDrawer(GravityCompat.START);
break;
}
return true;
}
});
GridLayoutManager gridLayoutManager = new GridLayoutManager(MainActivity.this,1);
mRecyclerView.setLayoutManager(mLayoutManager);
myFoodList = new ArrayList<>();
mFoodData = new FoodData("Rawa Kesar",R.drawable.rawa,"INGREDIENTS");
mFoodData = new FoodData("Jalebi",R.drawable.jalebi,"INGREDIENTS");
mFoodData = new FoodData("Rasmalai",R.drawable.rasmlai,"INGREDIENTS");
mFoodData = new FoodData("Kaju Katli",R.drawable.kajuktli,"INGREDIENTS");
myAdapter = new MyAdapter(MainActivity.this,myFoodList);
mRecyclerView.setAdapter(myAdapter);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
#Override
public boolean onQueryTextSubmit(String s) {
return false;
}
#Override
public boolean onQueryTextChange(String s) {
myAdapter.getFilter().filter(s.toString());
return false;
}
});
}
// public void btn_uploadActivity(View view) {
//
// startActivity(new Intent(this,Upload_Recipe));
// }
// public void setUpToolbar() {
// drawerLayout = findViewById(R.id.drawerLayout);
// Toolbar toolbar = findViewById(R.id.toolbar);
// setSupportActionBar(toolbar);
// actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.app_name, R.string.app_name);
// drawerLayout.addDrawerListener(actionBarDrawerToggle);
// actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.black));
// actionBarDrawerToggle.syncState();
//
// }
#Override
public boolean onOptionsItemSelected(#NonNull MenuItem item) {
int id=item.getItemId();
if(id==R.id.sort){
//display alert dialogue to choose sorting
showSortDialogue();
return true;
}
return super.onOptionsItemSelected(item);
}
private void showSortDialogue() {
//options to display in dialogue
String[] sortOptions = {"Newest","Oldest"};
//create alert dislogue
AlertDialog.Builder builder= new AlertDialog.Builder(this);
builder.setTitle("Sort By").setIcon(R.drawable.sort_2).setItems(sortOptions,new DialogInterface.OnClickListener(){
#Override
public void onClick(DialogInterface dialog, int which) {
if(which==0){
SharedPreferences.Editor editor=mSharedPreferences.edit();
editor.putString("Sort","newest");
editor.apply();
recreate();
}else if(which==1){
SharedPreferences.Editor editor=mSharedPreferences.edit();
editor.putString("Sort","oldest");
editor.apply();
recreate();
}
}
}
);
builder.show();
}
// #Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.menu,menu);
// MenuItem menuItem=menu.findItem(R.id.search);
// //SearchView searchView=(SearchView) menuItem.getActionView();
// searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
// #Override
// public boolean onQueryTextSubmit(String s) {
// return false;
// }
//
// #Override
// public boolean onQueryTextChange(String s) {
// myAdapter.getFilter().filter(s.toString());
// return false;
// }
// });
// return super.onCreateOptionsMenu(menu);
// }
#Override
public void onBackPressed() {
Intent a =new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
}
this is my mainActiviy.xml code where i have usedNavigation View
I have checked my code many times but not able to find the mistake...it would be great help if someone helps me in this
Thanks in advance.
add navigation view below linear layout, it will work. In drawer layout , content should be first then navigation view.

When I press the back button all the way to Login, the fields show the previous user data inserted

I'm making an android application on Java. The problem with this app is that when I'm in the main fragment and press the back button, I want it to go back to login (which happens) but the fields of username and password show the data from the last user and I want those fields to show empty like if the app was restarted.
This is my loginuser function inside of my login class.
public void loginUser() {
String url = MeuSingleton.servidor + "/login";
loginemail = email.getText().toString().trim();
loginpass = pass.getText().toString().trim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
#Override
public void onResponse(String response) {
try {
if (response.length() == 9){
Toast.makeText(Login.this, "Login efectuado com sucesso!", Toast.LENGTH_SHORT).show();
Intent i = new Intent(Login.this, MainActivity.class);
startActivity(i);
} else {
mostrarErro(getString(R.string.tituloerro), getString(R.string.login_errado));
}
} catch (Exception e) {
mostrarErro(getString(R.string.tituloerro), getString(R.string.backenderro));
}
}
},
new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
mostrarErro(getString(R.string.tituloerro), getString(R.string.interneterro));
}
}) {
#Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("email", loginemail);
map.put("password", loginpass);
return map;
}
};
MeuSingleton.getInstance(this).addToRequestQueue(stringRequest);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(350, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
And this is my main activity class:
public class MainActivity extends AppCompatActivity implements
NavigationView.OnNavigationItemSelectedListener{
MainFragment mainFragment;
FragmentManager fragmentManager;
FragmentTransaction fragmentTransaction;
DrawerLayout drawer;
NavigationView navigationView;
ActionBarDrawerToggle toggle;
Toolbar toolbar;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
navigationView = findViewById(R.id.nested);
navigationView.setNavigationItemSelectedListener(this);
drawer = findViewById(R.id.drawer);
toggle = new ActionBarDrawerToggle(this,drawer,toolbar,R.string.open,R.string.close);
drawer.addDrawerListener(toggle);
toggle.setDrawerIndicatorEnabled(true);
toggle.syncState();
mainFragment = new MainFragment();
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragmentContainer,mainFragment);
fragmentTransaction.commit();// add the fragment
}
#Override
public boolean onNavigationItemSelected(#NonNull MenuItem menuItem) {
closeDrawer();
if(menuItem.getItemId() == R.id.submeteralerta){
loadFragment(new InsAlertaFragment());
}
if(menuItem.getItemId() == R.id.veralertas){
loadFragment(new SecondFragment());
}
if(menuItem.getItemId() == R.id.logout){
finish();
}
if(menuItem.getItemId() == R.id.sobremim){
loadFragment(new SobreMimFragment());
}
if(menuItem.getItemId() == R.id.ajuda){
loadFragment(new AjudaFragment());
}
return true;
}
private void loadFragment(Fragment secondFragment) {
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentContainer,secondFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
private void closeDrawer() {
drawer.closeDrawer(GravityCompat.START);
}
}
And finally my main fragment, which is where I want to press back and go to Login:
public class MainFragment extends Fragment {
#Nullable
#Override
public View onCreateView(#NonNull LayoutInflater inflater, #Nullable ViewGroup container, #Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main,container,false);
return view;
}
#Override
public void onViewCreated(#NonNull View view, #Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
Thanks for the help!
If you want a Login activity with empty text fields when you go back, you could just clear the text fields out before you launch MainActivity. For example:
Toast.makeText(Login.this, "Login efectuado com sucesso!", Toast.LENGTH_SHORT).show();
email.setText("");
pass.setText("");
Intent i = new Intent(Login.this, MainActivity.class);
startActivity(i);

Navigation Drawer Back Pressed Fragment Doesn't Load

I have a navigation drawer with fragments. At start, I display Home fragment as default.
There are options on navigation menu. In 2 fragments I have SwipeRefreshLayout. Until all recyclerview data are fetched then I display data and invisible SwipeRefreshLayout.
One of these fragments (included SwipeRefReshLayout) works fine but, in Home fragment something is wrong.
For example(use case)
You started app and you saw Home fragment
You clicked Profile fragment on navigation menu
You run onBackPressed(back button).
In this case data never loads and SwipeRefReshLayout is always spinning. (I also tried without refreshlayout, still same)
Any idea how to fix this? My thought is, its about displaying default fragment.
Navigation Drawer Activity
public class Page_Navigation extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
Fragment fragment;
FragmentManager fragmentManager = getSupportFragmentManager();
NavigationView navigationView;
SharedPreferences mSharedPref;
DrawerLayout drawer;
private Tracker mTracker;
FragmentTransaction fragmentTransaction;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page__navigation);
//
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
TextView toolbar_head = findViewById(R.id.toolbar_head);
ImageView toolbar_image = findViewById(R.id.toolbar_image);
ImageView toolbar_profile = findViewById(R.id.toolbar_profile);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
//
AnalyticsApplication application = (AnalyticsApplication) getApplication();
mTracker = application.getDefaultTracker();
mTracker.setScreenName("page_navigation");
mTracker.send(new HitBuilders.ScreenViewBuilder().build());
//FIRST SETTINGS
setSupportActionBar(toolbar);
Typeface customFont = Typeface.createFromAsset(getAssets(), "Montserrat-Medium.ttf");
toolbar_head.setTypeface(customFont);
//Get Sessions
mSharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String session_user_name = mSharedPref.getString("session_user_name", "");
String session_user_photo = mSharedPref.getString("session_user_photo", "");
//Navigation Drawer
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setItemIconTintList(null);
//
View headerView = navigationView.getHeaderView(0);
TextView nav_userName = (TextView) headerView.findViewById(R.id.textView_nav_userName);
CircleImageView imageView_navigation = (CircleImageView) headerView.findViewById(R.id.imageView_navigation);
Glide.with(getApplicationContext()).load(session_user_photo).into(imageView_navigation);
nav_userName.setText(session_user_name);
headerView.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (drawer.isDrawerOpen(Gravity.START)) {
drawer.closeDrawer(Gravity.START);
}
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
showProfileFragment();
}
}, 300);
}
});
toolbar_image.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
drawer.openDrawer(GravityCompat.START);
}
});
toolbar_profile.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Fragment fragment;
FragmentManager manager = getSupportFragmentManager();
fragment = new Nav_Profile();
fragmentTransaction = manager.beginTransaction();
fragmentTransaction.replace(R.id.navContent, fragment).addToBackStack(null).commit();
}
});
displayDefaultFragment();
}
#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.page__navigation, 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.
final int id = item.getItemId();
drawer.closeDrawer(GravityCompat.START);
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
switch (id) {
case R.id.nav_home:
fragment = new Nav_Home();
break;
case R.id.nav_contact:
fragment = new Nav_Contact();
break;
case R.id.nav_articles:
fragment = new Nav_Article();
break;
case R.id.nav_about:
fragment = new Nav_AboutUs();
break;
case R.id.nav_suggest:
fragment = new Nav_Suggest();
break;
case R.id.nav_share:
fragment = new Nav_Share();
break;
case R.id.nav_rateApp:
fragment = new Nav_RateApp();
break;
}
fragmentManager.beginTransaction()
.replace(R.id.navContent, fragment)
.addToBackStack(null)
.commit();
}
}, 350);
return true;
}
public void displayDefaultFragment() {
fragment = new Nav_Home();
fragmentManager.beginTransaction().replace(R.id.navContent, fragment).commit();
}
public void showProfileFragment() {
fragment = new Nav_Profile();
fragmentManager.beginTransaction().replace(R.id.navContent, fragment).addToBackStack(null).commit();
}
}
Home Fragment
public class Nav_Home extends Fragment implements View.OnClickListener{
SharedPreferences mSharedPref;
private SwipeRefreshLayout swipeRefresh_home;
private CardView item_homeTop_coupons, item_homeTop_draws, item_homeTop_event;
private LinearLayout layout_all_article, layout_all_999;
private ScrollView shimmer_home;
private List<Model_ListItem> listNewItems;
private RecyclerView recyclerView_item_home;
private List<Model_Article> articleList;
private RecyclerView recyclerView_article_home;
#Override
public void onCreate(#Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fetchItemsNew();
fetchArticlesNew();
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_nav__home, container, false);
item_homeTop_coupons = view.findViewById(R.id.item_homeTop_coupons);
item_homeTop_draws = view.findViewById(R.id.item_homeTop_draws);
item_homeTop_event = view.findViewById(R.id.item_homeTop_event);
recyclerView_item_home = view.findViewById(R.id.recyclerView_item_home);
recyclerView_article_home = view.findViewById(R.id.recyclerView_article_home);
layout_all_article = view.findViewById(R.id.layout_all_article);
layout_all_999 = view.findViewById(R.id.layout_all_999);
swipeRefresh_home = view.findViewById(R.id.swipeRefresh_home);
shimmer_home = view.findViewById(R.id.shimmer_home);
item_homeTop_coupons.setOnClickListener(this);
item_homeTop_draws.setOnClickListener(this);
item_homeTop_event.setOnClickListener(this);
layout_all_999.setOnClickListener(this);
layout_all_article.setOnClickListener(this);
//first settngs
mSharedPref = PreferenceManager.getDefaultSharedPreferences(view.getContext());
String session_user_email = mSharedPref.getString("session_user_email","");
swipeRefresh_home.setRefreshing(true);
return view;
}
#Override
public void onClick(View v) {
switch (v.getId()){
case R.id.item_homeTop_coupons:
startActivity(new Intent(getContext(), Page_Coupon.class));
break;
case R.id.item_homeTop_draws:
startActivity(new Intent(getContext(), Page_Draw.class));
break;
case R.id.item_homeTop_event:
startActivity(new Intent(getContext(), Page_Event.class));
break;
case R.id.layout_all_999:
//999 city search activity
startActivity(new Intent(getContext(), Page_SearchCity.class));
break;
case R.id.layout_all_article:
//article fragment
Fragment fragment;
FragmentManager fragmentManager = getFragmentManager();
fragment = new Nav_Article();
fragmentManager.beginTransaction().replace(R.id.navContent, fragment).addToBackStack(null).commit();
break;
}
}
public void fetchItemsNew(){
listNewItems = new ArrayList<>();
API_Service api_service = Client.getRetrofitInstance().create(API_Service.class);
Call<List<Model_ListItem>> call = api_service.fetchItemsNew();
call.enqueue(new Callback<List<Model_ListItem>>() {
#Override
public void onResponse(Call<List<Model_ListItem>> call, Response<List<Model_ListItem>> response) {
if(response.code() == 200){
listNewItems = response.body();
Adapter_HomeItem adapter_homeItem = new Adapter_HomeItem(getContext(), listNewItems);
LinearLayoutManager layoutManager
= new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView_item_home.setHasFixedSize(true);
recyclerView_item_home.setLayoutManager(layoutManager);
recyclerView_item_home.setAdapter(adapter_homeItem);
SnapHelper helper = new LinearSnapHelper();
helper.attachToRecyclerView(recyclerView_item_home);
}
}
#Override
public void onFailure(Call<List<Model_ListItem>> call, Throwable t) {
}
});
}
public void fetchArticlesNew(){
articleList = new ArrayList<>();
API_Service api_service = Client.getRetrofitInstance().create(API_Service.class);
Call<List<Model_Article>> callArticle = api_service.fetchArticlesNew();
callArticle.enqueue(new Callback<List<Model_Article>>() {
#Override
public void onResponse(Call<List<Model_Article>> call, Response<List<Model_Article>> response) {
if(response.code() == 200){
articleList = response.body();
Adapter_HomeArticles adapter_homeArticles = new Adapter_HomeArticles(getContext(), articleList);
LinearLayoutManager layoutManager
= new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
recyclerView_article_home.setLayoutManager(layoutManager);
recyclerView_article_home.setHasFixedSize(true);
recyclerView_article_home.setAdapter(adapter_homeArticles);
}
}
#Override
public void onFailure(Call<List<Model_Article>> call, Throwable t) {
}
});
}
}
Firstly you must disable SwipeRefreshLayout spinning when successfully or not fetched data:
swipeRefresh_home.setRefreshing(false);
If you do not do this spinner will be spinning all the time.
Another problem is that you have one fragment and you try to assign to it Nav_Home fragment and Nav_Profile fragment.
Fragment fragment;
public void displayDefaultFragment() {
fragment = new Nav_Home();
fragmentManager.beginTransaction().replace(R.id.navContent, fragment).commit();
}
public void showProfileFragment() {
fragment = new Nav_Profile();
fragmentManager.beginTransaction().replace(R.id.navContent, fragment).addToBackStack(null).commit();
}
Try to separate them and show like this:
Fragment homeFragment;
Fragment profileFragment;
public void displayDefaultFragment() {
homeFragment = new Nav_Home();
fragmentManager.beginTransaction().replace(R.id.navContent, homeFragment).commit();
}
public void showProfileFragment() {
profileFragment = new Nav_Profile();
fragmentManager.beginTransaction().replace(R.id.navContent, profileFragment).addToBackStack(null).commit();
}

How to directly select fragment class on launch of the MainActivity?

I'm trying to figure out how to directly display the memberFragment.class fragment instead of the MainActivity from showing without selecting it on the navigation bar.
My Code:
public class AdminActivity extends AppCompatActivity {
private DrawerLayout mdrawerl;
private ActionBarDrawerToggle mtoggle;
private FirebaseAuth auth;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);
auth = FirebaseAuth.getInstance();
mdrawerl = (DrawerLayout) findViewById(R.id.drawer);
mtoggle = new ActionBarDrawerToggle(this,mdrawerl,R.string.open, R.string.close);
mdrawerl.addDrawerListener(mtoggle);
NavigationView nvDrawer = (NavigationView) findViewById(R.id.nv) ;
mtoggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupDrawerContent(nvDrawer);
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mtoggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
public void selectItemDrawer(MenuItem menuItem) {
auth = FirebaseAuth.getInstance();
Fragment myFragment = null;
Class fragmentClass;
switch (menuItem.getItemId()){
case R.id.signout:
auth.getInstance().signOut();
Intent i = new Intent(AdminActivity.this, LoginActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
return;
}
switch (menuItem.getItemId()){
case R.id.members:
fragmentClass = memberFragment.class;
break;
case R.id.transactions:
fragmentClass = transaction.class;
break;
default:
fragmentClass = member.class;
}
try {
myFragment = (Fragment) fragmentClass.newInstance();
}
catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flcontent,myFragment).commit();
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
mdrawerl.closeDrawers();
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
#Override
public boolean onNavigationItemSelected(#NonNull MenuItem item) {
selectItemDrawer(item);
return false;
}
});
}
The problem here is that when launching the activity, it would launch on the Activity itself instead of the fragment memberFragment as the default.
Try with below code, put below code inside your onCreate() :
memberFragment frag = new memberFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.flcontent, frag)
.commit();
Full code should be like this :
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);
auth = FirebaseAuth.getInstance();
mdrawerl = (DrawerLayout) findViewById(R.id.drawer);
mtoggle = new ActionBarDrawerToggle(this,mdrawerl,R.string.open, R.string.close);
mdrawerl.addDrawerListener(mtoggle);
NavigationView nvDrawer = (NavigationView) findViewById(R.id.nv) ;
mtoggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupDrawerContent(nvDrawer);
memberFragment frag = new memberFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.flcontent, frag)
.commit();
}
You can not launch a fragment without activity but you can launch fragment suddenly after activity launch.
To do that do simple fragment transaction on activity onCreate and most important part select menu item from NavigationView.
Copy past below code:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);
auth = FirebaseAuth.getInstance();
mdrawerl = (DrawerLayout) findViewById(R.id.drawer);
mtoggle = new ActionBarDrawerToggle(this,mdrawerl,R.string.open,
R.string.close);
mdrawerl.addDrawerListener(mtoggle);
NavigationView nvDrawer = (NavigationView) findViewById(R.id.nv) ;
mtoggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupDrawerContent(nvDrawer);
memberFragment frag = new memberFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.flcontent, frag)
.commit();
nvDrawer.getMenu().getItem(0).setChecked(true);
}

Categories