Skip to main content

ANDROID - Adding ActionBar Navigation Tabs PART-2 (with GridView & MultipleSelection)


(Please ignore project folder name "AlarmManager")

Before Go Ahead Please Check PART-1



We have created TabFragment1 class in PART-1. I have just modify it.

 package com.AlarmManager;  
 import android.content.Context;  
 import android.database.Cursor;  
 import android.graphics.Bitmap;  
 import android.os.Bundle;  
 import android.provider.MediaStore;  
 import android.view.LayoutInflater;  
 import android.view.View;  
 import android.view.ViewGroup;  
 import android.view.View.OnClickListener;  
 import android.widget.BaseAdapter;  
 import android.widget.CheckBox;  
 import android.widget.GridView;  
 import android.widget.ImageView;  
 import com.actionbarsherlock.app.SherlockFragment;  
 public class TabFragment1 extends SherlockFragment {  
      private GridView gridV;  
      private int count;  
      private Bitmap[] thumbnails;  
      private boolean[] thumbnailsselection;  
      private String[] arrPath;  
      @Override  
      public View onCreateView(LayoutInflater inflater, ViewGroup container,  
                Bundle savedInstanceState) {  
           // Inflate the layout for this fragment  
           View view = inflater.inflate(R.layout.show_file, container, false);  
           // do your view initialization here  
           gridV = (GridView) view.findViewById(R.id.grid_view);  
           final String[] columns = { MediaStore.Images.Media.DATA,  
                     MediaStore.Images.Media._ID };  
           final String orderBy = MediaStore.Images.Media._ID;  
           Cursor imagecursor = getActivity().managedQuery(  
                     MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,  
                     null, orderBy);  
           int image_column_index = imagecursor  
                     .getColumnIndex(MediaStore.Images.Media._ID);  
           this.count = imagecursor.getCount();  
           this.thumbnails = new Bitmap[this.count];  
           this.arrPath = new String[this.count];  
           this.thumbnailsselection = new boolean[this.count];  
           for (int i = 0; i < this.count; i++) {  
                imagecursor.moveToPosition(i);  
                int id = imagecursor.getInt(image_column_index);  
                int dataColumnIndex = imagecursor  
                          .getColumnIndex(MediaStore.Images.Media.DATA);  
                thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(  
                          getActivity().getContentResolver(), id,  
                          MediaStore.Images.Thumbnails.MICRO_KIND, null);  
                arrPath[i] = imagecursor.getString(dataColumnIndex);  
           }  
           gridV.setAdapter(new ImageAdapter(getActivity()));  
           imagecursor.close();  
           return view;  
      }  
      public class ImageAdapter extends BaseAdapter {  
           private LayoutInflater mInflater;  
           private Context mContext;  
           public ImageAdapter(Context context) {  
                mContext = context;  
           }  
           public int getCount() {  
                return count;  
           }  
           public Object getItem(int position) {  
                return position;  
           }  
           public long getItemId(int position) {  
                return position;  
           }  
           public View getView(int position, View convertView, ViewGroup parent) {  
                ViewHolder holder;  
                if (convertView == null) {  
                     holder = new ViewHolder();  
                     convertView = LayoutInflater.from(mContext).inflate(  
                               R.layout.row_photo, null);  
                     holder.imageview = (ImageView) convertView  
                               .findViewById(R.id.thumbImage);  
                     holder.checkbox = (CheckBox) convertView  
                               .findViewById(R.id.itemCheckBox);  
                     convertView.setTag(holder);  
                } else {  
                     holder = (ViewHolder) convertView.getTag();  
                }  
                holder.checkbox.setId(position);  
                holder.imageview.setId(position);  
                holder.checkbox.setOnClickListener(new OnClickListener() {  
                     public void onClick(View v) {  
                          // TODO Auto-generated method stub  
                          CheckBox cb = (CheckBox) v;  
                          int id = cb.getId();  
                          if (thumbnailsselection[id]) {  
                               cb.setChecked(false);  
                               thumbnailsselection[id] = false;  
                          } else {  
                               cb.setChecked(true);  
                               thumbnailsselection[id] = true;  
                          }  
                     }  
                });  
                holder.imageview.setOnClickListener(new OnClickListener() {  
                     public void onClick(View v) {  
                          // TODO Auto-generated method stub  
                          int id = v.getId();  
                          // Intent intent = new Intent();  
                          // intent.setAction(Intent.ACTION_VIEW);  
                          // intent.setDataAndType(Uri.parse("file://" +  
                          // arrPath[id]),"image/*");  
                          // startActivity(intent);  
                     }  
                });  
                holder.imageview.setImageBitmap(thumbnails[position]);  
                holder.checkbox.setChecked(thumbnailsselection[position]);  
                holder.id = position;  
                return convertView;  
           }  
      }  
      class ViewHolder {  
           ImageView imageview;  
           CheckBox checkbox;  
           int id;  
      }  
 }  

show_file.xml



 <?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   android:layout_width="fill_parent"  
   android:layout_height="fill_parent"  
   android:orientation="vertical" >  
   <GridView  
     xmlns:android="http://schemas.android.com/apk/res/android"  
     android:id="@+id/grid_view"  
     android:layout_width="fill_parent"  
     android:layout_height="fill_parent"  
     android:columnWidth="90dp"  
     android:gravity="center"  
     android:horizontalSpacing="10dp"  
     android:numColumns="auto_fit"  
     android:stretchMode="columnWidth"  
     android:verticalSpacing="10dp" >  
   </GridView>  
 </LinearLayout>  

row_photo.xml




 <?xml version="1.0" encoding="UTF-8"?>  
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   android:layout_width="fill_parent"  
   android:layout_height="fill_parent" >  
   <ImageView  
     android:id="@+id/thumbImage"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_centerInParent="true" />  
   <CheckBox  
     android:id="@+id/itemCheckBox"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignParentRight="true"  
     android:layout_alignParentTop="true" />  
 </RelativeLayout>  

Enjoy Coding...

Comments

Popular posts from this blog

Connecting mysql Database in ANDROID using PHP & JSON

 To implement this tutorial you should have basic knowledge of how to run PHP script and start server.  If we talk about client-server architecture, client is Android device and in server side there is a combination of PHP Script and MySQL. In short, PHP Script sits in middle as shown in image. Lets suppose that we have a MySQL database named Employee, and a table int created, with the following SQL: CREATE TABLE `employee` (   `emp_id` int(11) NOT NULL auto_increment,   `emp_name` varchar(100) NOT NULL,   PRIMARY KEY  (`emp_id`) ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; The PHP code will be very simple: Now Create Android Project :  The Android part is only a bit more complicated: -use a HttpPost to get the data -convert response to string -parse JSON data in to List In Your First Activity : O/P :

Jev: The Decision Layer Cutting AI Agent Costs

The expensive part of an AI agent usually isn't the final answer: it's the string of small decisions behind it. Every tool pick and "are we done yet" check is its own LLM reasoning call, and agent loops make dozens per task. Jev is a typed decision layer built to replace exactly those calls. Here's what that looks like inside a personal finance agent answering a spending question, and what it's worth evaluating for your own MCP stack. Key Takeaways Jev never executes anything: it only routes, labels, or checks; your existing LLM and code still do the real work. In a finance agent, it turns a spending question into a routed, labeled, fact-checked answer without extra reasoning calls. Adoption is shadow-mode first: test it against your current routing before it touches production traffic What Is Jev, and Why Are AI Teams Adopting It Now? Jev is a fast, typed decision model: send it a state and bounded questions, and it answers each in one of three fixed shapes: ...

Why Domain-Specific AI Agents Beat One Big Agent

Everyone is building agents right now. Real estate firms. Independent insurance brokers. Fortune 500 companies with budgets big enough to hire an army of consultants. Ask around and you'll hear the same story everywhere: "we're building our own agent." And yet almost nobody is asking the obvious question: why does the default approach keep failing? One large, general-purpose agent gets wired up to every tool the business owns. It impresses in the demo. Then it quietly stalls before production. There's a gap between what businesses want and what they're actually getting. They want AI woven into their data, their workflows, their day-to-day operations. What they get instead is one oversized agent trying to be a sales rep, a compliance officer, and a customer support line, all at once. That gap is an architecture problem, not a model problem. Key Takeaways The default "one big agent" pattern breaks down on context bloat, cost, fragility, and portability...