Friday 22 August 2014

Let ' s check android L ' s new UI RecyclerView

As per Google Document RecyclerView is a more advanced and flexible version of ListView.

This widget is a container for large sets of views that can be recycled and scrolled very efficiently. Use the RecyclerView widget when you have lists with elements that change dynamically.

The RecyclerView has been developed with extensibility in mind, so it is possible to create any kind of layout you can think of, but not without a little pain-in-the-ass dose. This is Android, so things are never easy.
If you want to use a RecyclerView, you will need to feel comfortable with three elements:
- RecyclerView.Adapter
- LayoutManager
- ItemAnimator
  • A layout manager for positioning items
  • Default animations for common item operations


RecyclerView is easy to use, because it provides:
You also have the flexibility to define custom layout managers and animations for this widget.
To use the RecyclerView widget, you have to specify an adapter and a layout manager. To create an adapter, you extend the RecyclerView.Adapter class. The details of the implementation depend on the specifics of your dataset and the type of views. For more information, see the examples below.

We can use RecyclerView from Api version 7 in android .

Let me make my first list with RecyclerView and share my code with you all.


Below is my Activity class which use RecycleView to show list items.

import java.util.ArrayList;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.LayoutManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class RecycleActivity extends ActionBarActivity {

   
    private RecyclerView mRecyclerView;
   
    private ListAdapter mListAdapter;
   
   
    private ArrayList<String> mArrayList=new ArrayList<String>();
   
   
    private LayoutManager mLayoutManager;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycle);
      
        initView();
      
    }
   
   
    private void initView(){
      
        mRecyclerView=(RecyclerView)findViewById(R.id.recycle_view);
      
        mRecyclerView.setHasFixedSize(true);
      
        mLayoutManager=new LinearLayoutManager(this);
      
        mRecyclerView.setLayoutManager(mLayoutManager);
      
        mArrayList.clear();
      
        for (int i=0;i<30;i++){
          
            mArrayList.add("Listview Item  at Position "+ i);
          
        }
      
      
        mListAdapter=new ListAdapter(mArrayList);
      
        mRecyclerView.setAdapter(mListAdapter);
      
      
    }
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.recycle, 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);
    }
}


Here is my Adapter Class to bind data in to RecycleView


import java.util.ArrayList;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class ListAdapter extends RecyclerView.Adapter<ViewHolder>{
   
    private ArrayList<String> mArrayData;
   
   
    public ListAdapter(ArrayList<String> mArrayListUpdate){
       
        this.mArrayData=mArrayListUpdate;
       
    }
   
    public static class ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder{
       
        public ViewHolder(View view) {
            super(view);
            // TODO Auto-generated constructor stub
           
            mRlRowView=(RelativeLayout) view;
           
            mTxtView=(TextView) mRlRowView.findViewById(R.id.txt_title);
           
            mImgView=(ImageView)mRlRowView.findViewById(R.id.img_row);
           
            mCheckBox=(CheckBox)mRlRowView.findViewById(R.id.checkbox_item);
           
        }

        CheckBox mCheckBox;
       
        ImageView mImgView;
       
        TextView mTxtView;
       
        RelativeLayout mRlRowView;
    }

    @Override
    public int getItemCount() {
        // TODO Auto-generated method stub
        return mArrayData.size();
       
    }
   
   
     // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(
            android.support.v7.widget.RecyclerView.ViewHolder viewHolder, final int position) {
        // TODO Auto-generated method stub
       
        Log.i("LOG_TAG", "onBindViewHolder-->"+ position);
       
        ViewHolder mViewHolder=((ViewHolder)viewHolder);
       
        mViewHolder.mTxtView.setText(mArrayData.get(position));
       
        mViewHolder.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
           
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
               
                Log.w("LOG_TAG", "onCheckedChanged is"+ isChecked + "Position is"+ position);
               
            }
        });
   
    }

    @Override
    public android.support.v7.widget.RecyclerView.ViewHolder onCreateViewHolder(
            ViewGroup viewGroup, int viewType) {
        // TODO Auto-generated method stub
        // create a new view

        Log.i("LOG_TAG", "onCreateViewHolder-->");
        View mView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row_item, viewGroup, false);
       
         // set the view's size, margins, paddings and layout parameters

        ViewHolder mViewHolder=new ViewHolder(mView);
       
       
        return mViewHolder;
    }
   }


Here is download link for my created Demo :
https://drive.google.com/file/d/0B-8An4Rd1nmKcU93VHU1Y1FWTG8/view?usp=sharing
It's Goog Drive link and from top there is download icons from there you can easily download whole code.

 

Friday 16 May 2014

What mean by Activities, tasks, and intents in Android ?


Activities In Android:

In Android, an activity is an application component that defines a screen of information and all of the associated actions the user can perform. Your app is a collection of activities, consisting of both the activities you create and those you re-use from other apps.

 

Tasks:

A task is the sequence of activities a user follows to accomplish a goal. A single task can make use of activities from just one app, or may draw on activities from a number of different apps.

 

Intents:

An intent is a mechanism for one app to signal it would like another app's assistance in performing an action. An app's activities can indicate which intents they can respond to. For common intents such as "Share", the user may have many apps installed that can fulfill that request.

 

 


Thursday 17 April 2014

Custom Alert Or Custom Dialog Fragment in Android

I recently can not able to Create Alert Dialog with out it Boarder so i end up to resolved it by Support Dialog Fragment .

You can check my code .



public class AlertActivity extends ActionBarActivity {

    private AlertDialog mAlertDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alert);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.alert, 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) {

            //showAlertDialog();
           
            CreateDialogFragment();

            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_alert,
                    container, false);
            return rootView;
        }
    }

    private void showAlertDialog() {

        AlertDialog.Builder mBuilder = new Builder(new ContextThemeWrapper(
                this, android.R.style.Theme_Translucent_NoTitleBar));// new
                                                                        // Builder(this,android.R.style.Theme_Translucent_NoTitleBar);

        View mView = LayoutInflater.from(this).inflate(
                R.layout.alert_dialog_layout, null);

        mBuilder.setView(mView);
        // mBuilder.setC
        // mBuilder.s

        mAlertDialog = mBuilder.create();

        mAlertDialog.setInverseBackgroundForced(true);
        mAlertDialog.setCanceledOnTouchOutside(true);

        mAlertDialog.getWindow().setBackgroundDrawableResource(
                android.R.color.transparent);
        mAlertDialog.show();

    }

    private void CreateDialogFragment() {

        View mView = LayoutInflater.from(this).inflate(
                R.layout.alert_dialog_layout, null);
        MyDialogFragment mDialogFragment=new MyDialogFragment(mView);
       
        //mDialogFragment.setStyle(MyDialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar);
        mDialogFragment.setShowsDialog(true);
       
       
        mDialogFragment.show(getSupportFragmentManager(), "dialog");


    }

    public class MyDialogFragment extends DialogFragment {

        private View mView;

        /*
         * public MyDialogFragment newInstance(View mView) {
         *
         * mView=mView; return new MyDialogFragment(); }
         */

        public MyDialogFragment(View mView) {
            this.mView = mView;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
           
            return mView;
        }
       
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
          Dialog dialog = super.onCreateDialog(savedInstanceState);

          // request a window without the title
          dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
          return dialog;
        }
    }

}