Using a mix of Activities and Fragments in my application - java

I'm building an app with a navigation drawer, and an action bar with a button which pressed should take users to a log in page. The log in page is an activity.
I have inserted what I believe to be the appropriate code, however the section in bold comes back with the following error: Annotations are not allowed here
This code previously worked, and now it has this error and my app obviously wont launch. Does anyone know why? Thanks!
#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_LoginPage) {
Toast.makeText(getApplicationContext(), "Welcome to the Employee Log-in Page", Toast.LENGTH_LONG).show();
switch (item.getItemId()){
case R.id.action_LoginPage:
Intent intent = new Intent(this, LoginPageMain.class);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
**#SuppressWarnings("StatementWithEmptyBody")
#Override
public boolean onNavigationItemSelected(MenuItem item) {
// Code for Nav Bar Item Clicks (Button Clicks)
int id = item.getItemId();**

Related

How to go back main screen when user logout app from any screen?

When i logout my app (press logout menu button) from second activity, then it redirect to login page but when i pressed back button again show second screen Activity, it should be goto main screen on back pressed, because i use finish() method but still not go to main screen. then what i do?
Here is my code.
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.second_adapter, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.logout_sec_Act) {
session.logoutUser();
finish();
Toast.makeText(Second_activity.this, "Logout...", Toast.LENGTH_LONG)
.show();
}
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
That is because your previous activity is still in the back stack of your task. One way to solve it is by moving to a new empty task when you logout, something like this:
Intent logoutIntent = new Intent(this, MainActivity.class);
logoutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(logoutIntent);

Android: Cannot resolve symbol "id"

I am currently following the Google documents for Android programming. I am at the part where I need to perform a task when a button is pressed on the action bar. Here is the code I have:
#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.
switch (item.getItemId()){
case R.id.action_search:
openSearch();
return true;
case R.id.action_settings:
openSettings();
return true;
default:
return super.onOptionsItemSelected(item);
}
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
However on if(id == R.id.action_settings), I get an error saying that the symbol r can not be resolved. What could be causing this as it all looks fine to me.
Aside from missing id which renders OP's broken, anything below switch() is simply dead code and can be safely removed (I'd bet your IDE is already flagging you this anyway):
#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.
switch (item.getItemId()){
case R.id.action_search:
openSearch();
return true;
case R.id.action_settings:
openSettings();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
EDIT
I get an error saying that the symbol r can not be resolved.
Not seeing real error message, I'd assume the complain here is due to the id but if it's really about R, then check import section to see if you got import android.R there. If so, remove it and try again.
if (id == R.id.action_settings) {
return true;
}
Won't compile because you are not declaring what id is anywhere before that.
Did you delete int id = item.getItemId(); by accident?
Edit : that whole if condition is redundant anyways, you are handling action_settings in code before.

Android app for Wifi automation

I want to develop an android app that triggers Wifi..
When we open the app, if our Wifi is on, it will toast Connected Message Else, a button having a text connect will be displayed and
when you click that button, button text will change to connected and your Wifi is turned on.
I have done this .. but
my sir asked me to introduce such change that once we press button it changes from connect to connected and Wifi is on..
Now, if we manually turn off the Wifi in our setting and then we open our paused app, then the button will show connect option again.
I want to introduce automation in my app. My sir gave me hint that there is some helper class in android which keep on calling the method or some event handler that handles the event that occurs outside the app, but I still have no idea how to do that.
Please help me, thanks!
Here is the java code of my app:
public class MainActivity extends ActionBarActivity implements OnClickListener {
WifiManager wf;
static Button buttn;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttn = (Button) findViewById(R.id.button);
buttn.setOnClickListener(this);
wf = (WifiManager) getSystemService(Context.WIFI_SERVICE);
}
public void onClick(View v) {
if (v == buttn) {
wf.setWifiEnabled(true);
buttn.setText("connected");
Toast.makeText(this, "Wifi Connected", Toast.LENGTH_LONG).show();
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.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);
}
}
I'd take a look at an Activity's Life cycle here
I believe you'll be interested in the "onResume" and able to detect if WiFi is still connected there.

onOptionsItemSelected is not functioning properly

I have two buttons on my action bar, a logout button, and a create new message button. However, if i click the create new message button (where nothing is supposed to happen yet), it logs me back out. My code is set as what it is supposed to do. Any suggestions?
#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();
switch(id) {
case R.id.action_newPool:
Toast.makeText(getApplicationContext(),"Being Implemented", Toast.LENGTH_LONG).show();
case R.id.action_logOut:
ParseUser.logOut();
Intent leaveIntent = new Intent (MyPoolsActivity.this, DispatchActivity.class);
leaveIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(leaveIntent);
}
You need a break keyword after your first case, otherwise it will execute the next case. This allows it to "break" out of the switch block.
switch(id) {
case R.id.action_newPool:
Toast.makeText(getApplicationContext(),"Being Implemented", Toast.LENGTH_LONG).show();
break;
case R.id.action_logOut:
ParseUser.logOut();
Intent leaveIntent = new Intent (MyPoolsActivity.this, DispatchActivity.class);
leaveIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(leaveIntent);
break;
}

how to override action bar back button in android?

I want to customize the activity back button in action bar, not in hard key back button. I have overriden the onBackPressed() method. It works with my emulator back button, but not with action bar back button.
I want it to happen with action bar. How can I do this?
Here is my code:
#Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
return;
}
I have used this toast whether back pressed is working or not but the actual implementation changes like to move back to previous activity. But this is not working with the button present on top of action bar (besides title of the activity).
Please any one could specify me the problem.
I think you want to override the click operation of home button. You can override this functionality like this in your activity.
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
If you want ActionBar back button behave same way as hardware back button:
#Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return false;
}
Two things to keep in mind that the user can either press back button or press the actionbar home button.
So, if you want to redirect him to the same destination then you can do this.
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return false;
}
#Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
startActivity(intent);
finish();
}
This will take the user to the intent pressing either key or the action bar button.
Sorry mine is a late answer, but for anyone else arriving at this page with the same question, I had tried the above:
#Override
public boolean onOptionsItemSelected(MenuItem item) {
...
if (item.getItemId() == android.R.id.home) {
....
}
....
}
but this failed to catch the "Back" button press.
Eventually I found a method that worked for me on https://stackoverflow.com/a/37185334/3697478 which is to override the "onSupportNavigateUp()" as I am using the actionbar from the "AppCompatActivity" support library. (There is an equivalent "onNavigateUp()" for the newer actionbar/toolbar library.)
#Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
and I removed the "android:parentActivityName=".MainActivity" section from the manifest file.
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return true;
}
(1) Add Parent activity for your child activity (AndroidManifest.xml)
<activity
android:name=".ParentActivity" />
(2) override the onSupportNavigateUp method inside the child activity
#Override
public boolean onSupportNavigateUp() {
onBackPressed();
return false;
}
I have achieved this, by using simply two steps,
Step 1: Go to AndroidManifest.xml and in the add the parameter in tag - android:parentActivityName=".home.HomeActivity"
example :
<activity
android:name=".home.ActivityDetail"
android:parentActivityName=".home.HomeActivity"
android:screenOrientation="portrait" />
Step 2: in ActivityDetail add your action for previous page/activity
example :
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
If you want to return to the previous instance of an Activity by pressing of ActionBar home button, without recreating it, you can override getParentActivityIntent method to use the one from the back stack:
#TargetApi(Build.VERSION_CODES.JELLY_BEAN)
#Override
public Intent getParentActivityIntent() {
return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
EDIT:
Also you can achieve the same result by
setting the launchMode of your parent activity to singleTop.
So setandroid:launchMode="singleTop" to parent activity in your manifest.
Or you can use flag FLAG_ACTIVITY_CLEAR_TOP with the UP intent.
reference: Providing Up Navigation
#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();
if (id == android.R.id.home) {
onBackPressed();
return true;
}
//noinspection SimplifiableIfStatement
if (id == R.id.signIn) {
return true;
}
return super.onOptionsItemSelected(item);
}
///////////////////
#Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
There are several ways how to set up back button in bar:
1) method .setDisplayHomeAsUpEnabled(true); will do it, and then you can simply override android.R.id.home
2) adding <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" /> in Android Manifest, but in this case you can not override android.R.id.home in OnOptionsMenuSelected.
.. for those who wonder why it doesn't work for them...

Categories