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

Stop Babysitting your AI Coding Agent Every Single Session

  Watched a video by DSquaredLabs on " No more re-explaining: Give your AI agent a memory graph " — here's what stuck with me and why I think this three-tool system is worth your attention If you work on a large codebase with AI coding tools, you already know the ritual. Open a new chat, paste your file structure, explain your stack, describe how the modules connect — and repeat the whole thing tomorrow. It is not a minor inconvenience. It is a compounding productivity tax that gets worse as your project grows. This article breaks down a three-tool system designed to fix exactly that. If you want the full walkthrough with a live demo on a real monorepo, the video at the bottom covers everything in depth — but the core concepts are worth understanding before you dive in. The Problem With How Most Developers Use AI Today Most AI-assisted coding workflows are missing three things that every good engineering team actually has: A map of the codebase A process for how w...

Android - Notifications - 3 (Applying a big view style to a notification)

Big picture style Bitmap icon1 = BitmapFactory.decodeResource(getResources(), R.drawable.dhaval1); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( this).setAutoCancel(true) .setContentTitle("DJ-Android notification") .setSmallIcon(R.drawable.ic_launcher).setLargeIcon(icon1) .setContentText("Hello World!"); NotificationCompat.BigPictureStyle bigPicStyle = new NotificationCompat.BigPictureStyle(); bigPicStyle.bigPicture(icon1); bigPicStyle.setBigContentTitle("Dhaval Sodha Parmar"); mBuilder.setStyle(bigPicStyle); // Creates an explicit intent for an Activity in your app Intent resultIntent = new Intent(this, testActivity.class); // The stack builder object will contain an artificial ba...

Don't Ship AI Agent Skills Without Evals

At the AI Engineer World's Fair on July 1, 2026, Philipp Schmid, a Staff Engineer on the Gemini API and agents team at Google DeepMind, asked a room full of engineers a simple question: who uses skills with their coding agents? Every hand went up. Who has evals for those skills? Almost none. That gap is the entire talk, which Schmid also wrote up on his own blog, philschmid.de/testing-skills . His team indexed the skills ecosystem through SkillsBench and found the same pattern everywhere: people ship a SKILL.md file after two manual test runs and move on. It looks fine in a demo. It quietly corrupts outputs in production, because bad skills don't crash. They just make the agent confidently wrong. If you've already read our breakdown of Matt Pocock's Claude Code skills library , think of this as the other half of that story: what happens once you've installed a skill and it's actually running against real prompts. Key Takeaways SkillsBench indexed 47,000+ un...