1

Hello I have create an Android application, in that I add some buttons and images in ListView using CustomAdapter.

My Files Structure is:

layout
   [1] album ->List View
   [2] album_list -> Button

So how I create Button Object ?

My Code is:

album.xml

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="1" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_column="0"
        android:layout_gravity="left|top"
        android:layout_row="0" >
    </ListView>
</GridLayout>

album_list.xml

<RelativeLayout
            android:id="@+id/RelativeLayout001"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:columnCount="2"
            android:orientation="horizontal" >



            <Button
                android:id="@+id/btn_eng"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="100px"
                android:layout_height="31px"
                android:layout_marginLeft="11dp"
                android:layout_marginRight="17dp"
                android:layout_marginBottom="5dp"
                android:layout_marginTop="35dp"
                android:layout_alignTop="@+id/btn_hindi"                    
                android:layout_alignBottom="@+id/ImageView12"
                android:layout_alignLeft="@+id/ImageView12"
                android:background="@drawable/normal"
                android:text="ENG"
                android:textColor="@android:color/white" />

            <TextView
                android:id="@+id/tv_albumname"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/tv_go"
                android:layout_alignTop="@+id/iv_album_image"
                android:layout_marginLeft="2dp"
                android:layout_marginTop="2dp"
                android:text="Album Name"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="@android:color/white" />

            <Button
                android:id="@+id/btn_hindi"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="100px"
                android:layout_height="31px"
                android:layout_marginTop="7dp"
                android:layout_marginRight="17dp"                   
                android:layout_alignTop="@+id/ImageView12"                  
                android:layout_alignLeft="@+id/btn_eng"
                android:background="@drawable/normal"
                android:text="HINDI"

                android:textColor="@android:color/white" />

        </RelativeLayout>

Album.java

Album_List_Custom_Adapter adapter =
            new Album_List_Custom_Adapter(getApplicationContext(), albumList);      
    lv.setAdapter(adapter);

Album_List_Custom_Adapter.java

private Context context;
ArrayList<HashMap<String, String>> listAlbum;

ViewHolder vholder;

private OnClickListener listener;


public Album_List_Custom_Adapter(Context context, ArrayList<HashMap<String, String>> albumList) 
{
    this.context = context;     
    this.listAlbum=albumList;
}

@Override
public int getCount() 
{
    return listAlbum.size();
}

@Override
public Object getItem(int position) 
{
    return null;
}

@Override
public long getItemId(int position) 
{
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
    View vi=convertView;

    if (convertView == null) 
    {           
        vi = inflater.inflate(R.layout.home_list_model, null);
        vholder = new ViewHolder();

        vholder.hindi=(Button)vi.findViewById(R.id.btn_hindi);
        vholder.eng=(Button)vi.findViewById(R.id.btn_eng);                      

        vholder.tv_album_name = (TextView) vi.findViewById(R.id.tv_albumname);

        vi.setTag(vholder);
    }
    else 
    {        
        vholder = (ViewHolder) (vi.getTag());
    }

    vholder.hindi.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            vholder.hindi.setBackgroundResource(R.drawable.selected);
            vholder.eng.setBackgroundResource(R.drawable.normal);
        }
    });

    vholder.hindi.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            v.setBackgroundResource(R.drawable.selected);
            vholder.eng.setBackgroundResource(R.drawable.normal);
        }
    });

    vholder.eng.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            v.setBackgroundResource(R.drawable.selected);
            vholder.hindi.setBackgroundResource(R.drawable.normal);
        }
    });

    vholder.tv_album_name.setText(listAlbum.get(position).get("album"));

    return vi;
} 

static class ViewHolder 
{
    TextView tv_album_name;
    Button eng, hindi;
}
3
  • create button object in adapter where u r inflating list item layout. Commented Feb 22, 2014 at 6:25
  • I also want to set Click Listener on Button. How ? Commented Feb 22, 2014 at 6:27
  • add Button b=(Button) view.findViewById(R.id.button); Commented Feb 22, 2014 at 7:07

3 Answers 3

3

You have to create button object in adapter where u r inflating list item layout.

like

  Button b = (Button)yourViewobject.findViewById(R.id.button1);

Now implement onClick event for that

  b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

EDIT: Use this. Make one custom file in drawable folder named mybutton.xml

   <?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android">

   <item android:drawable="@drawable/selected" android:state_selected="true"></item>

   <item android:drawable="@drawable/normal"></item>

   </selector>

Now just in your custom layout file set background for your both buttons.

   android:background="@drawable/mybutton" // for Hindi Button

and same as for english button.

And also now remove onClick event method from your adapter.

Need to change..

    <Button
            android:id="@+id/btn_eng"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="100px"
            android:layout_height="31px"
            android:layout_marginLeft="11dp"
            android:layout_marginRight="17dp"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="35dp"
            android:clickable = "true"
            android:focusable = "true"
            android:layout_alignTop="@+id/btn_hindi"                    
            android:layout_alignBottom="@+id/ImageView12"
            android:layout_alignLeft="@+id/ImageView12"
            android:background="@drawable/mybutton"
            android:text="ENG"
            android:textColor="@android:color/white" />
Sign up to request clarification or add additional context in comments.

18 Comments

It is working... but my requirement is when I click on one Button, the background effect of other buttons are changed. How make it possible ?
So r they not changed?
Changed, but there are many buttons with same ID so when I click on Button, another buttons background picture not changed. The current button's background is changed successfully.
But give them to different id and find id same as for others button so it will be changed.
Add it in your custom xml file which you have inflated
|
0

Do this in your custom adapter

@Override
      public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
         ViewHolder viewHolder;
       if (convertView == null) {

        convertView = inflater.inflate(R.layout.list_item, null);
        viewHolder=new ViewHolderforGroup();
           viewHolder.btn = (Button)convertView.findViewById(R.id.btn);
          convertView.setTag(viewHolder)
       }else{
           viewHolder = (ViewHolder)convertView.getTag(viewHolder);
       }

       viewHolder.btn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {


                }
            });


    }

    static class ViewHolder{
      Button btn;

    }

4 Comments

It is working... but my requirement is when I click on one Button, the background effect of other buttons are changed. How make it possible ?
vholder.btn_hindi.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { v.setBackgroundResource(R.drawable.selected); vholder.btn_eng.setBackgroundResource(R.drawable.normal); } });
@SagarZala vholder.btn_eng.setBackgroundResource is there in your xml?
I have total 20 Buttons in that 10 are named with Hindi and another 10 are named with 'Eng`. So when I clicked on any one button I want to change background of another buttons.
0
  public class CustomAdapter  extends BaseAdapter
{

private Context mContext;
Cursor cursor;
public CustomAdapter(Context context,Cursor cur) 
{
        super();
        mContext=context;
        cursor=cur;

}

public int getCount() 
{
    // return the number of records in cursor
    return cursor.getCount();
}

// getView method is called for each item of ListView
public View getView(int position,  View view, ViewGroup parent) 
{
                // inflate the layout for each item of listView
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.listview_each_item, null);


                                    // fetch the sender number and sms body from cursor
                String Number="123456";

                // get the reference of textViews
                TextView Number=(TextView)view.findViewById(R.id.textViewSMSSender);
                Button btn=(Button)view.findViewById(R.id.button);

                // Set the Sender number and smsBody to respective TextViews 
                Number.setText(senderNumber);
btn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
});


                return view;
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.