Starting an activity from another package - android

I'm trying to start an activity from another package withing the same project. The problem is that I keep geet errors saying that it can't find the class and asks me if I declared it in my manifest file. Here is the Manifest file for the project, the code for the class and the log which states the exception given. The two source packeges are simply named "ingegneria" and "unisannioportal" or just consider them "package1" and "package2".
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name="unisannioportal.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ingegneria.ElencoAvvisiActivity"
android:label="#string/title_activity_elenco_avvisi" >
</activity>
<activity
android:name="ingegneria.AvvisoActivity"
android:label="#string/title_activity_avviso" >
</activity>
</application>
</manifest>
here is the code for the main class:
package unisannioportal;
import com.example.R;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity
{
private String titolo;
private String[] dipartimenti;
private DrawerLayout menuDrawerLayout;
private ListView elencoMenuListView;
private ActionBarDrawerToggle menuDrawerToggle;
#Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
titolo = this.getTitle().toString();
dipartimenti = getResources().getStringArray(R.array.departments_array);
menuDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
elencoMenuListView = (ListView) findViewById(R.id.left_drawer);
elencoMenuListView.setAdapter(new ArrayAdapter<String>(this,
R.layout.drawer_list_item, dipartimenti));
// set up the drawer's list view with items and click listener
elencoMenuListView.setAdapter(new ArrayAdapter<String>(this,
R.layout.drawer_list_item, dipartimenti));
elencoMenuListView.setOnItemClickListener(new DrawerItemClickListener());
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
// ActionBarDrawerToggle ties together the the proper interactions
// between the sliding drawer and the action bar app icon
menuDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
menuDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description for accessibility */
R.string.drawer_close /* "close drawer" description for accessibility */
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(titolo);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(titolo);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
menuDrawerLayout.setDrawerListener(menuDrawerToggle);
if (savedInstanceState == null)
{
selectItem(0);
}
}
/*#Override*/
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
#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 (menuDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
/* The click listner for ListView in the navigation drawer */
private class DrawerItemClickListener implements ListView.OnItemClickListener
{
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
selectItem(position);
}
}
private void selectItem(int position)
{
if(position == 0)
{
Intent intent = new Intent(this, ingegneria.ElencoAvvisiActivity.class);
this.startActivity(intent);
}
/* // update the main content by replacing fragments
Fragment fragment = new PlanetFragment();
Bundle args = new Bundle();
args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
fragment.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);*/
}

You might want to try something like this:
Intent intent = new Intent(Intent.ACTION_MAIN);
PackageManager manager = getApplicationContext().getPackageManager();
intent = manager.getLaunchIntentForPackage(YourPackageName);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity();

the package declaration has no error.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example"
android:versionCode="1"
android:versionName="1.0" >
But the error locates in the activity declaration.
<activity
android:name="ingegneria.ElencoAvvisiActivity"
android:label="#string/title_activity_elenco_avvisi" >
</activity>
because there is one dot missing before the activity name. should look like below:
<activity
android:name=".ingegneria.ElencoAvvisiActivity"
android:label="#string/title_activity_elenco_avvisi" >
</activity>
or
<activity
android:name="com.example.ingegneria.ElencoAvvisiActivity"
android:label="#string/title_activity_elenco_avvisi" >
</activity>

Related

android activity stack- back navigation

I am developing an app which has a home screen consisting of list view(Home Activity).User clicks on list item and new activity is started named as Topic.This activity also consist of list view. Home is set as parent activity for Topic.
Now in Topic class i am again calling Topic class using intent.
So a user clicks on a list item in Home activity,which opens a new Topic activity.User again clicks on list item ,and another new activity Topic is created,so we are at rd level. My app is working fine till here, but as Parent for Topic is Home,so as soon as i press back or up button,irrespective of where i am in my app,it is always the Home class which opens.
How to handle this so that all user can traverse back to each activity.
The code is given below:
Home.java
package com.example.guninder.home;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import java.util.List;
import static android.widget.AdapterView.*;
public class Home extends AppCompatActivity implements FetchDataListener {
private ProgressDialog dialog;
private ListView HomeListview;
private DrawerLayout home_drawer_layout;
private ListView Menu_option_list;
private String[] Menu_list;
private ActionBarDrawerToggle drawerToggle;
private ApplicationAdaptor adapter;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
HomeListview = (ListView) findViewById(R.id.listView1);
itemClickListener(HomeListview);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
Menu_list = getResources().getStringArray(R.array.Menu_options);
home_drawer_layout = (DrawerLayout) findViewById(R.id.home_drawable);
Menu_option_list = (ListView) findViewById(R.id.home_menu_option);
Menu_option_list.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_expandable_list_item_1, Menu_list));
// home_Toolbar.setNavigationIcon(R.drawable.ic_drawer);
drawerToggle = new ActionBarDrawerToggle(this, home_drawer_layout, R.string.drawer_open, R.string.drawer_close) {
#Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
#Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
};
drawerToggle.setDrawerIndicatorEnabled(true);
home_drawer_layout.setDrawerListener(drawerToggle);
initView();
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_activity_actions, menu);
return true;
}
private void initView() {
// show progress dialog
dialog = ProgressDialog.show(this, "", "Loading...");
// String url = "http://dexterous.comuv.com/connect.php";
String url = "http://192.168.0.25/connect.php";
FetchDataTask task = new FetchDataTask(this);
task.execute(url,null);
}
#Override
public void onFetchComplete(List<Application> data) {
// dismiss the progress dialog
if (dialog != null) dialog.dismiss();
// create new adapter
adapter = new ApplicationAdaptor(this, data);
HomeListview.setAdapter(adapter);
// set the adapter to list
//setListAdapter(adapter);
}
public void onPostCreate(Bundle savedInstanceState){
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
#Override
public void onFetchFailure(String msg) {
// dismiss the progress dialog
if (dialog != null) dialog.dismiss();
// show failure message
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
#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;
}
if(drawerToggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
public void itemClickListener(final ListView HomeListview) {
HomeListview.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Application app = adapter.getItem(position);
Intent intent = new Intent(Home.this, Topic.class);
intent.putExtra("topic_name",app.getTitle());
intent.putExtra("topic_id", app.getTopic_id());
intent.putExtra("Content", app.getParentContent());
Toast toast=Toast.makeText(Home.this,app.getParentContent(),Toast.LENGTH_LONG);
startActivity(intent);
}
});
}
}
Topic.java
package com.example.guninder.home;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class Topic extends AppCompatActivity implements FetchDataListener {
String topicName, ParentContent;
int topic_id;
//TextView txv;
ProgressDialog Topicdialog;
ListView topiclistView;
ApplicationAdaptor tAdaptor;
TextView txv;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_topic);
Bundle extras = getIntent().getExtras();
if (extras == null) {
topicName = null;
}
topicName = extras.getString("topic_name");
topic_id = extras.getInt("topic_id");
ParentContent = extras.getString("Content");
txv = (TextView) findViewById(R.id.content);
txv.setMovementMethod(ScrollingMovementMethod.getInstance());
if (ParentContent.isEmpty()) {
txv.setVisibility(txv.GONE);
} else {
txv.setText(ParentContent);
}
setTitle(topicName);
topiclistView = (ListView) findViewById(R.id.topiclistView1);
itemClickListener(topiclistView);
topicinitView();
}
#Override
public void onPause(){
super.onPause();
}
public void onResume(){
super.onResume();
}
private void topicinitView() {
// show progress dialog
Topicdialog = ProgressDialog.show(this, "", "Loading...");
// String url = "http://dexterous.comuv.com/Topic.php";
String url = "http://192.168.0.25/Topic.php";
FetchDataTask task = new FetchDataTask(this);
task.execute(url, String.valueOf(topic_id));
}
#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_topic, 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);
}
#Override
public void onFetchComplete(List<Application> data) {
if (Topicdialog != null) Topicdialog.dismiss();
// create new adapter
tAdaptor = new ApplicationAdaptor(this, data);
topiclistView.setAdapter(tAdaptor);
// set the adapter to list
//setListAdapter(adapter);
}
#Override
public void onFetchFailure(String msg) {
// dismiss the progress dialog
if (Topicdialog != null) Topicdialog.dismiss();
// show failure message
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
public void itemClickListener(final ListView TopicListview) {
TopicListview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Application app = tAdaptor.getItem(position);
if (app.getChildExist()) {
Intent intent = new Intent(Topic.this, Topic.class);
intent.putExtra("topic_name", app.getTitle());
intent.putExtra("topic_id", app.getTopic_id());
intent.putExtra("Content", app.getParentContent());
// Toast toast = Toast.makeText(Topic.this, app.getTopic_id(), Toast.LENGTH_LONG);
//toast.show();
startActivity(intent);
finish();
}
}
});
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.guninder.home" >
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name=".Home"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Topic"
android:label="#string/title_activity_topic"
android:parentActivityName=".Home" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.guninder.home.Home" />
</activity>
<activity
android:name=".SetNotification"
android:label="#string/title_activity_set_notification"
android:theme="#android:style/Theme.Dialog" >
</activity>
</application>
</manifest>
Please help.Thanks in advance
Comment finish() inside the listitem click in topic class. it will solve your problem.
What you could do is, do not set Home as the parent of Topic.
This way when user presses back, the previous activity that was open will be shown to the user.

App icon doesn't appear in action bar while using Theme.appCompat.light.DarkActionBar

I am following a tutorrial to make a Navigation Drawer using supported library V7 so i had to use Theme.appCompat.light.DarkActionBar as the app theme...
The problem is:
App Icon doesn't appear in the default place in the Action Bar.
The drawer icon is shifted to the right
Here is my Code:
package com.tutorial18nav.tutorial18nav;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements OnItemClickListener {
private DrawerLayout mDrawerLayout;
private ListView mDrawerlist;
String[] sections;
private android.support.v4.app.ActionBarDrawerToggle mDrawerToggle;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerlist = (ListView) findViewById(R.id.left_drawer);
sections = getResources().getStringArray(R.array.sections);
mDrawerlist.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, sections));
mDrawerlist.setOnItemClickListener(this);
mDrawerToggle = new android.support.v4.app.ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
#Override
public void onDrawerOpened(View drawerView) {
Toast.makeText(MainActivity.this, "Drawer is opened", Toast.LENGTH_SHORT).show();
}
#Override
public void onDrawerClosed(View drawerView) {
Toast.makeText(MainActivity.this, "Drawer is closed", Toast.LENGTH_SHORT).show();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
#Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(this, "Section number " + (position + 1) + " has been selected", Toast.LENGTH_SHORT).show();
selectItem(position);
}
public void selectItem(int position) {
mDrawerlist.setItemChecked(position, true);
setTitle(sections[position]);
}
public void setTitle(String title) {
getSupportActionBar().setTitle(title);
}
#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;
}
#Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
#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 == R.id.action_settings) {
return true;
}
if(mDrawerToggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
}
Activity_main.xml:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="#+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<ListView
android:background="#FF8800"
android:id="#+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="left">
</ListView>
</android.support.v4.widget.DrawerLayout>
Manifest File:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tutorial18nav.tutorial18nav"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/Theme.AppCompat.Light.DarkActionBar" >
<activity
android:name=".MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.tutorial18nav.tutorial18nav.MainActivity" >
<item
android:id="#+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="#string/action_settings"/>
</menu>

Nothing happens when pressing Enter while searching using Android Search widget

I am trying to implement the search widget in android but unsuccessful. It lets me type the query text in the seacrh textbox but nothing happens when I press Enter. I followed the tutorial very closely http://developer.android.com/training/search/setup.html. But I can't fix the problem. I've been trying everything for 6 hours now. Please help!
Here is my Android manifest file:
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/Theme.Sherlock">
<meta-data android:name="android.app.default_searchable"
android:value="com.example.pt_labguide.SearchableActivity" />
<activity
android:name="com.example.pt_labguide.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".BasicMetabolicPanelActivity"
android:label="#string/basic_metab_panel" >
<intent-filter>
<action android:name="com.example.pt_labguide.BasicMetabolicPanelActivity"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".ArterialBloodGasActivity"
android:label="#string/arterial_blood_gases" >
<intent-filter>
<action android:name="com.example.pt_labguide.ArterialBloodGasActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".DisplayLabValueActivity">
<intent-filter>
<action android:name="com.example.pt_labguide.DisplayLabValueActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".SearchableActivity">
<intent-filter>
<action android:name="com.example.pt_labguide.SearchableActivity" />
<category android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="#xml/searchable" />
</activity>
</application>
</manifest>
****Here is the Searchable activity:****
package com.example.pt_labguide;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.widget.SearchView;
public class SearchableActivity extends SherlockFragmentActivity {
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
handleIntent(getIntent());
}
#Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
Log.d("SearchResultsActivity", "onNewIntent called");
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
doMySearch(query);
Log.d("SearchResultsActivity", query);
}
}
private void doMySearch(String query){
Intent intent = new Intent("com.example.pt_labguide.DisplayLabValueActivity");
intent.putExtra("labValue", query);
startActivity(intent);
}
}
**Here is the Main activity:**
package com.example.pt_labguide;
import android.app.Fragment;
import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.widget.Button;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.widget.SearchView;
import android.view.View;
import android.content.Intent;
public class MainActivity extends SherlockFragmentActivity{
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Notice that setContentView() is not used, because we use the root
// android.R.id.content as the container for each fragment
// setup action bar for tabs
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(true);
Tab tab = actionBar.newTab()
.setText(R.string.list)
.setTabListener(new TabListener<ListFragment>(
this, "list", ListFragment.class));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setText(R.string.categories)
.setTabListener(new TabListener<CategoryFragment>(
this, "category", CategoryFragment.class));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setText(R.string.favorites)
.setTabListener(new TabListener<FavoriteFragment>(
this, "favorite", FavoriteFragment.class));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setText(R.string.about)
.setTabListener(new TabListener<AboutFragment>(
this, "about", AboutFragment.class));
actionBar.addTab(tab);
}
static class TabListener<T extends SherlockFragment> implements ActionBar.TabListener {
private android.support.v4.app.Fragment mFragment;
private final SherlockFragmentActivity mActivity;
private final String mTag;
private final Class<T> mClass;
/** Constructor used each time a new tab is created.
* #param activity The host Activity, used to instantiate the fragment
* #param tag The identifier tag for the fragment
* #param clz The fragment's Class, used to instantiate the fragment
*/
public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
}
/* The following are each of the ActionBar.TabListener callbacks */
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// Check if the fragment is already initialized
if (mFragment == null) {
// If not, instantiate and add it to the activity
mFragment = SherlockFragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag);
} else {
// If it exists, simply attach it in order to show it
ft.attach(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
// Detach the fragment, because another one is being attached
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// User selected the already selected tab. Usually do nothing.
}
}//end inner class
#Override
public boolean onSearchRequested() {
return super.onSearchRequested();
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.search, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
return true;
}
public void display_BMP (View view) {
startActivity(new Intent("com.example.pt_labguide.BasicMetabolicPanelActivity"));
}
public void display_ABG (View view) {
startActivity(new Intent("com.example.pt_labguide.ArterialBloodGasActivity"));
}
public void display_LabValue (View view) {
String name = ((Button) view).getText().toString();
Intent intent = new Intent("com.example.pt_labguide.DisplayLabValueActivity");
intent.putExtra("labValue", name);
startActivity(intent);
}
}//end class TabDemo
**Here is the menu/search.xml:**
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:com.example.pt_labguide="http://schemas.android.com/apk/res-auto">
<item android:id="#+id/menu_search"
android:title="#string/search_hint"
android:icon="#drawable/ic_search_lens"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="com.actionbarsherlock.widget.SearchView" />
</menu>
**Here is the raw/xml/searchable.xml:**
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="#string/app_name"
android:hint="#string/search_hint" >
</searchable>

Clicking a Button and Opening a new Activity [duplicate]

This question already has an answer here:
Android adding new xml and class
(1 answer)
Closed 8 years ago.
This could be perceived as a silly question, but I am very new to Android.
I am making an app and I have added an info Activity, I have an info button on my main page and want to go to the info activity when I click it..
I'm actually not sure how to go about it.
this is the xml for the Button:
<Button
android:id="#+id/button2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="#FFFFFF"
android:text="#string/info_btn" />
Do I add the code in the main activity, the intro activity or the xml?
This is my main activity
package ie.gmit.project;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
public void openSite(View v){
Uri uri = Uri.parse("http://gmitsu.ie/clubssocs/directory.html");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
#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;
}
#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 == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}
}
UPDATED:
This has the updated code, and runs error free... but the button still will not go to the new activity when I run it.
package ie.gmit.project;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private Button button2;//this is a bad name
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button2= (Button) findViewById(R.id.button2);//find the button
button2.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(), IntroActivity.class);
startActivity(i);
// finish();//if you want to close main activity after start info activity
}});
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
public void openSite(View v){
Uri uri = Uri.parse("http://gmitsu.ie/clubssocs/directory.html");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
#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;
}
#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 == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}
}
Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ie.gmit.project"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name="ie.gmit.project.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ie.gmit.project.IntroActivity"
android:label="#string/title_activity_intro" >
</activity>
</application>
</manifest>
try this
public class MainActivity extends Activity {
private Button button2;//this is a bad name
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
button2= (Button) findViewById(R.id.button2);//find the button
button2.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(), InfoActivity.class);
startActivity(i);
finish();//if you want to close main activity after start info activity
});
}
declare in manifest intro activity in manifest
<activity
android:name=".IntroActivity"
android:label="Intro Activity"
android:theme="#android:style/Theme.Light.NoTitleBar.Fullscreen" >
</activity>
if this does not work you can add entries to the log to see if the data are assigning well, such as:
#Override
public void onClick(View v) {
Log.i("MyLog", "Im here!");
Intent i = new Intent(v.getContext(), InfoActivity.class);
startActivity(i);
finish();//if you want to close main activity after start info activity
});

2.3 Android Device Natigation Drawer not geting Method getActionBar

Hello Friends i Implement one demo for Navigation Drawer example my main class file is as below :
import java.util.Locale;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.SearchManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] mPlanetTitles;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitle = mDrawerTitle = getTitle();
mPlanetTitles = getResources().getStringArray(R.array.planets_array);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
// set a custom shadow that overlays the main content when the drawer opens
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
// set up the drawer's list view with items and click listener
mDrawerList.setAdapter(new ArrayAdapter<String>(this,
R.layout.drawer_list_item, mPlanetTitles));
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
// enable ActionBar app icon to behave as action to toggle nav drawer
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
// ActionBarDrawerToggle ties together the the proper interactions
// between the sliding drawer and the action bar app icon
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description for accessibility */
R.string.drawer_close /* "close drawer" description for accessibility */
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
selectItem(0);
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
/* Called whenever we call invalidateOptionsMenu() */
#Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content view
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// The action bar home/up action should open or close the drawer.
// ActionBarDrawerToggle will take care of this.
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action buttons
switch(item.getItemId()) {
case R.id.action_websearch:
// create intent to perform web search for this planet
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, getActionBar().getTitle());
// catch event that there's no activity to handle intent
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Toast.makeText(this, R.string.app_not_available, Toast.LENGTH_LONG).show();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/* The click listner for ListView in the navigation drawer */
private class DrawerItemClickListener implements ListView.OnItemClickListener {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
private void selectItem(int position) {
// update the main content by replacing fragments
Fragment fragment = new PlanetFragment();
Bundle args = new Bundle();
args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
fragment.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
#Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/
#Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
#Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
/**
* Fragment that appears in the "content_frame", shows a planet
*/
public static class PlanetFragment extends Fragment {
public static final String ARG_PLANET_NUMBER = "planet_number";
public PlanetFragment() {
// Empty constructor required for fragment subclasses
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_planet, container, false);
int i = getArguments().getInt(ARG_PLANET_NUMBER);
String planet = getResources().getStringArray(R.array.planets_array)[i];
int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()),
"drawable", getActivity().getPackageName());
((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
getActivity().setTitle(planet);
return rootView;
}
}
}
And My Menifest file is as Below:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.navigationdrawerexample"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<application android:label="#string/app_name"
android:icon="#drawable/ic_launcher"
>
<activity android:name=".MainActivity" android:label="#string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
This Example in 4.0 Android device Working Fine But In 2.3 Android Device get error message like
07-26 10:18:32.719: E/AndroidRuntime(1107): java.lang.NoSuchMethodError: com.example.android.navigationdrawerexample.MainActivity.getActionBar
07-26 10:18:32.719: E/AndroidRuntime(1107): at com.example.android.navigationdrawerexample.MainActivity.onCreate(MainActivity.java:98)
07-26 10:18:32.719: E/AndroidRuntime(1107): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-26 10:18:32.719: E/AndroidRuntime(1107): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
07-26 10:18:32.719: E/AndroidRuntime(1107): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
07-26 10:18:32.719: E/AndroidRuntime(1107): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-26 10:18:32.719: E/AndroidRuntime(1107): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
07-26 10:18:32.719: E/AndroidRuntime(1107): at android.os.Handler.dispatchMessage(Handler.java:99)
07-26 10:18:32.719: E/AndroidRuntime(1107): at android.os.Looper.loop(Looper.java:130)
07-26 10:18:32.719: E/AndroidRuntime(1107): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-26 10:18:32.719: E/AndroidRuntime(1107): at java.lang.reflect.Method.invokeNative(Native Method)
07-26 10:18:32.719: E/AndroidRuntime(1107): at java.lang.reflect.Method.invoke(Method.java:507)
07-26 10:18:32.719: E/AndroidRuntime(1107): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-26 10:18:32.719: E/AndroidRuntime(1107): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-26 10:18:32.719: E/AndroidRuntime(1107): at dalvik.system.NativeStart.main(Native Method)
From the Android documentation:
The ActionBar APIs were first added in Android 3.0 (API level 11) but they are also available in the Support Library for compatibility with Android 2.1 (API level 7) and above.
Therefore, you should use getSupportActionBar() if you suport devices below API lvl 11.
Follow the ActionBar tutorial in the documentation for more information.
Use getSupportActionBar() instead of getActionBar().
Also when you are invalidating the menu, use supportInvalidateOptionsMenu() instead of invalidateOptionsMenu().
ActionBar APIs where introduced in HoneyComb so you cannot call them for API < 11.
One way is ActionBarCompat. Another option is to use ActionBarSherlock.

Categories

Resources