Wednesday, May 27, 2015

Add Image in Navigation Drawer Android Studio Template

I have to add Image in one of my project in slider Menu ,
I have used Android Studio Template Navigation Drawer  for material design .
For adding header on top of the list I have modified few lines in code: below are the simple steps:

Create an Android Studio project and select  Navigation Drawer Activity as shown below
Now your project structure is like this:


Now open activity_main.xml  and add LinearLayout and image view as shown below highlighted lines


<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout"    android:layout_width="match_parent" android:layout_height="match_parent"
tools:context=".MainActivity">
 <FrameLayout android:id="@+id/container" android:layout_width="match_parent"

    android:layout_height="match_parent" />


<LinearLayout    android:layout_width="@dimen/navigation_drawer_width"    android:layout_height="match_parent"    android:orientation="vertical"    android:layout_gravity="start"    android:id="@+id/slider_list_with_image"    >

<ImageView    android:layout_width="match_parent"    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher">
</ImageView>


<fragment android:id="@+id/navigation_drawer"    android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent"    android:layout_gravity="start"    android:name="com.naushad.navigationdrawersliderimage.NavigationDrawerFragment"    tools:layout="@layout/fragment_navigation_drawer" />

</LinearLayout>

</android.support.v4.widget.DrawerLayout>

Now open NavigationDrawerFragment.java and modify highlighted lines
  
public class NavigationDrawerFragment extends Fragment {

private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
  
private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";

private NavigationDrawerCallbacks mCallbacks;

private ActionBarDrawerToggle mDrawerToggle;

    private DrawerLayout mDrawerLayout;
    private ListView mDrawerListView;
    //private View mFragmentContainerView;
   //Replace it whereever it used in this class with linear layout    

    private LinearLayout mlinearLayout;

    private int mCurrentSelectedPosition = 0;
    private boolean mFromSavedInstanceState;
    private boolean mUserLearnedDrawer;

    public NavigationDrawerFragment() {
    }

    @Override    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
        mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);

        if (savedInstanceState != null) {
            mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
            mFromSavedInstanceState = true;
        }

        // Select either the default item (0) or the last selected item.        
        selectItem(mCurrentSelectedPosition);
    }

    @Override    
     public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override    
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        mDrawerListView = (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);
        mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override            
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                selectItem(position);
            }
        });
        mDrawerListView.setAdapter(new ArrayAdapter(
                getActionBar().getThemedContext(),
                android.R.layout.simple_list_item_activated_1,
                android.R.id.text1,
                new String[]{
                        getString(R.string.title_section1),
                        getString(R.string.title_section2),
                        getString(R.string.title_section3),
                }));
        mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
        return mDrawerListView;
    }

    public boolean isDrawerOpen() {
   return mDrawerLayout != null && 
      mDrawerLayout.isDrawerOpen(mlinearLayout);
     //*** MODIFIED by Naushad        
     //mDrawerLayout.isDrawerOpen(mFragmentContainerView);
    }

    public void setUp(int fragmentId, DrawerLayout drawerLayout) {
        //mFragmentContainerView = getActivity().findViewById(fragmentId);
        //*** MODIFIED by Naushad        
        mlinearLayout=(LinearLayout)getActivity().findViewById(R.id.slider_list_with_image);
        mDrawerLayout = drawerLayout;
       // 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
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);

          mDrawerToggle = new ActionBarDrawerToggle(
                getActivity(),                                 
               mDrawerLayout,                                  
              R.drawable.ic_drawer,            
               R.string.navigation_drawer_open,  
                R.string.navigation_drawer_close) {
            @Override            
             public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                if (!isAdded()) {
                    return;
                }

                getActivity().supportInvalidateOptionsMenu(); 
               // calls onPrepareOptionsMenu()            
             }

            @Override            
             public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                if (!isAdded()) {
                    return;
                }

                if (!mUserLearnedDrawer) {
                           
                    mUserLearnedDrawer = true;
                    SharedPreferences sp = PreferenceManager
                            .getDefaultSharedPreferences(getActivity());
                    sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
                }

                getActivity().supportInvalidateOptionsMenu(); 
               // calls onPrepareOptionsMenu()            
           }
        };
 
        if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
            //mDrawerLayout.openDrawer(mFragmentContainerView); 
           //***MODIFIED by Naushad                     
              mDrawerLayout.openDrawer(mlinearLayout);
        }

           mDrawerLayout.post(new Runnable() {
            @Override            
            public void run() {
                mDrawerToggle.syncState();
            }
        });

        mDrawerLayout.setDrawerListener(mDrawerToggle);
    }

    private void selectItem(int position) {
        mCurrentSelectedPosition = position;
        if (mDrawerListView != null) {
            mDrawerListView.setItemChecked(position, true);
        }
        if (mDrawerLayout != null) {
           // mDrawerLayout.closeDrawer(mFragmentContainerView);  
           //*** MODIFIED by Naushad               
          mDrawerLayout.closeDrawer(mlinearLayout);
        }
        if (mCallbacks != null) {
            mCallbacks.onNavigationDrawerItemSelected(position);
        }
    }

    @Override    
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mCallbacks = (NavigationDrawerCallbacks) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
        }
    }

    @Override    public void onDetach() {
        super.onDetach();
        mCallbacks = null;
    }

    @Override    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
    }

    @Override    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Forward the new configuration the drawer toggle component.        
       mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override    
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        
     if (mDrawerLayout != null && isDrawerOpen()) {
            inflater.inflate(R.menu.global, menu);
            showGlobalContextActionBar();
        }
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override    public boolean onOptionsItemSelected(MenuItem item) {
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }

        if (item.getItemId() == R.id.action_example) {
            Toast.makeText(getActivity(), "Example action.", Toast.LENGTH_SHORT).show();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

     private void showGlobalContextActionBar() {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setTitle(R.string.app_name);
    }

    private ActionBar getActionBar() {
        return ((ActionBarActivity) getActivity()).getSupportActionBar();
    }

   public static interface NavigationDrawerCallbacks {
            void onNavigationDrawerItemSelected(int position);
    }
}


Thats it here is the output :) make sure you have image in drawable folder You can get the source code from github here is the link

Thursday, May 14, 2015

[Error: ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.] Error: /Users/Naushad/IonicProjects/IonicApp/platforms/android/cordova/build: Command failed with exit code 2 at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23) at ChildProcess.emit (events.js:98:17) at maybeClose (child_process.js:766:16) at Process.ChildProcess._handle.onexit (child_process.js:833:5)


sudo ionic build android

[Error: ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.]
Error: /Users/Naushad/IonicProjects/IonicApp/platforms/android/cordova/build: Command failed with exit code 2
    at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
    at ChildProcess.emit (events.js:98:17)
    at maybeClose (child_process.js:766:16)
    at Process.ChildProcess._handle.onexit (child_process.js:833:5)

to solve this i use following steps in terminal :

sudo chown -R Naushad /usr/local/lib/node_modules/cordova

still have same error than i do follwing step

export PATH=$PATH:/users/Naushad/android-sdks/tools
 then i got below error  :)
[Error: Please install Android target: "android-22".

Hint: Open the SDK manager by running: /users/Naushad/android-sdks/tools/android
You will require:
1. "SDK Platform" for android-22
2. "Android SDK Platform-tools (latest)
3. "Android SDK Build-tools" (latest)]
Error: /Users/Naushad/IonicProjects/IonicApp/platforms/android/cordova/build: Command failed with exit code 2
    at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
    at ChildProcess.emit (events.js:98:17)
    at maybeClose (child_process.js:766:16)
    at Process.ChildProcess._handle.onexit (child_process.js:833:5)

then  I goto my Android sdk manager and update my android-22 and bam!! its work :)
Now I can build my ionic app for android :)

:preDexDebug
:dexDebug
:processDebugJavaRes UP-TO-DATE
:validateDebugSigning
:packageDebug
:zipalignDebug
:assembleDebug
:cdvBuildDebug

BUILD SUCCESSFUL

In short you need these two commands

sudo chown -R Naushad /usr/local/lib/node_modules/cordova

export PATH=$PATH:/users/Naushad/android-sdks/tools

and then update your android if it is not updated to latest version :)
hope this will help some one.

Sunday, May 3, 2015

Android Interview Questions 2015

what is object serialisation.
Object serilzation is  a process of converting the  object into stream of bites.
what is implicit and explicit intent?

what is the difference between relative layout and linear layout.

how different application communicate with other application.

States of activity.
An activity has essentially four states:
  • If an activity in the foreground of the screen (at the top of the stack), it is active or running.
  • If an activity has lost focus but is still visible (that is, a new non-full-sized or transparent activity has focus on top of your activity), it is paused. A paused activity is completely alive (it maintains all state and member information and remains attached to the window manager), but can be killed by the system in extreme low memory situations.
  • If an activity is completely obscured by another activity, it is stopped. It still retains all state and member information, however, it is no longer visible to the user so its window is hidden and it will often be killed by the system when memory is needed elsewhere.
  • If an activity is paused or stopped, the system can drop the activity from memory by either asking it to finish, or simply killing its process. When it is displayed again to the user, it must be completely restarted and restored to its previous state.
The following diagram shows the important state paths of an Activity. The square rectangles represent callback methods you can implement to perform operations when the Activity moves between states. The colored ovals are major states the Activity can be in.
State diagram for an Android Activity Lifecycle.

http rest api description.

instgram clone how is your approach?

whatsapp clone whats your approach?

Difference between array and array list?
  
 * Array have fixed size where array list not.
 * You cannot use generics in array where in array list you can
 *You cannot store primitive values in array list only object can be stored in arrayl ist where array can    contain both primitive and objects.

How notification works in android.

Have you work on any github api

what is gradle?


what is test driven programming ?