How to customize listview using baseadapter

前端 未结 5 433
陌清茗
陌清茗 2020-11-22 16:33

I wanna create a customized ListView like this:

\"TextView+ImageView

I think

相关标签:
5条回答
  • 2020-11-22 16:57

    Create your own BaseAdapter class and use it as following.

     public class NotificationScreen extends Activity
    {
    
    @Override
    protected void onCreate_Impl(Bundle savedInstanceState)
    {
        setContentView(R.layout.notification_screen);
    
        ListView notificationList = (ListView) findViewById(R.id.notification_list);
        NotiFicationListAdapter notiFicationListAdapter = new NotiFicationListAdapter();
        notificationList.setAdapter(notiFicationListAdapter);
    
        homeButton = (Button) findViewById(R.id.home_button);
    
    }
    
    }
    

    Make your own BaseAdapter class and its separate xml file.

    public class NotiFicationListAdapter  extends BaseAdapter
    {
    private ArrayList<HashMap<String, String>> data;
    private LayoutInflater inflater=null;
    
    
    public NotiFicationListAdapter(ArrayList data)
    {
    this.data=data;        
        inflater =(LayoutInflater)baseActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    
    
    
    public int getCount() 
    {
     return data.size();
    }
    
    
    
    public Object getItem(int position) 
    {
     return position;
    }
    
    
    
    public long getItemId(int position) 
    {
        return position;
    }
    
    
    
    public View getView(int position, View convertView, ViewGroup parent) 
    {
    View vi=convertView;
        if(convertView==null)
    
        vi = inflater.inflate(R.layout.notification_list_item, null);
    
        ImageView compleatImageView=(ImageView)vi.findViewById(R.id.complet_image);
        TextView name = (TextView)vi.findViewById(R.id.game_name); // name
        TextView email_id = (TextView)vi.findViewById(R.id.e_mail_id); // email ID
        TextView notification_message = (TextView)vi.findViewById(R.id.notification_message); // notification message
    
    
    
        compleatImageView.setBackgroundResource(R.id.address_book);
        name.setText(data.getIndex(position));
        email_id.setText(data.getIndex(position));
        notification_message.setTextdata.getIndex(position));
    
        return vi;
    }
    
      }
    

    BaseAdapter xml file.

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/inner_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="10dp"
    android:layout_weight="4"
    android:background="@drawable/list_view_frame"
    android:gravity="center_vertical"
    android:padding="5dp" >
    
    <TextView
        android:id="@+id/game_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Game name"
        android:textColor="#FFFFFF"
        android:textSize="15dip"
        android:textStyle="bold"
        android:typeface="sans" />
    
    <TextView
        android:id="@+id/e_mail_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/game_name"
        android:layout_marginTop="1dip"
        android:text="E-Mail Id"
        android:textColor="#FFFFFF"
        android:textSize="10dip" />
    
    <TextView
        android:id="@+id/notification_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/game_name"
        android:layout_toRightOf="@id/e_mail_id"
        android:paddingLeft="5dp"
        android:text="Notification message"
        android:textColor="#FFFFFF"
        android:textSize="10dip" />
    
    
    
    <ImageView
        android:id="@+id/complet_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginBottom="30dp"
        android:layout_marginRight="10dp"
        android:src="@drawable/complete_tag"
        android:visibility="invisible" />
    
    </RelativeLayout>
    

    Change it accordingly and use.

    0 讨论(0)
  • 2020-11-22 17:06
    private class ObjectAdapter extends BaseAdapter {
    
        private Context context;
        private List<Object>objects;
    
        public ObjectAdapter(Context context, List<Object> objects) {
            this.context = context;
            this.objects = objects;
        }
    
        @Override
        public int getCount() {
            return objects.size();
        }
    
        @Override
        public Object getItem(int position) {
            return objects.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
    
            if(convertView==null){
                holder = new ViewHolder();
                convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false);
                holder.text = (TextView) convertView.findViewById(android.R.id.text1);
                convertView.setTag(holder);
            }else{
                holder = (ViewHolder) convertView.getTag();
            }
    
            holder.text.setText(getItem(position).toString()));
            return convertView;
        }
    
        class ViewHolder {
            TextView text;
        }
    }
    
    0 讨论(0)
  • 2020-11-22 17:13

    I suggest using a custom Adapter, first create a Xml-file, for example layout/customlistview.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="wrap_content" >
        <ImageView
            android:id="@+id/image"
            android:layout_alignParentRight="true"
            android:paddingRight="4dp" />
        <TextView
            android:id="@+id/title"
            android:layout_toLeftOf="@id/image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="23sp"
            android:maxLines="1" />
        <TextView
            android:id="@+id/subtitle"
            android:layout_toLeftOf="@id/image" android:layout_below="@id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" /> 
    </RelativeLayout>
    

    Assuming you have a custom class like this

    public class CustomClass {
    
        private long id;
        private String title, subtitle, picture;
    
        public CustomClass () {
        }
    
        public CustomClass (long id, String title, String subtitle, String picture) {
            this.id = id;
            this.title= title;
            this.subtitle= subtitle;
            this.picture= picture;
        }
        //add getters and setters
    }
    

    And a CustomAdapter.java uses the xml-layout

    public class CustomAdapter extends ArrayAdapter {
    
    private Context context;
    private int resource;
    private LayoutInflater inflater;
    
    public CustomAdapter (Context context, List<CustomClass> values) { // or String[][] or whatever
    
        super(context, R.layout.customlistviewitem, values);
    
        this.context = context;
        this.resource = R.layout.customlistview;
        this.inflater = LayoutInflater.from(context);
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        convertView = (RelativeLayout) inflater.inflate(resource, null);
    
        CustomClass item = (CustomClass) getItem(position);
    
        TextView textviewTitle = (TextView) convertView.findViewById(R.id.title);
        TextView textviewSubtitle = (TextView) convertView.findViewById(R.id.subtitle);
        ImageView imageview = (ImageView) convertView.findViewById(R.id.image);
    
        //fill the textviews and imageview with the values
        textviewTitle = item.getTtile();
        textviewSubtitle = item.getSubtitle();
    
        if (item.getAfbeelding() != null) {
            int imageResource = context.getResources().getIdentifier("drawable/" + item.getImage(), null, context.getPackageName());
            Drawable image = context.getResources().getDrawable(imageResource);
        }
        imageview.setImageDrawable(image);
    
        return convertView;
        }
    }
    

    Did you manage to do it? Feel free to ask if you want more info on something :)

    EDIT: Changed the adapter to suit a List instead of just a List

    0 讨论(0)
  • 2020-11-22 17:15

    main.xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true" >
    
        </ListView>
    
    </RelativeLayout>
    

    custom.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <LinearLayout
                android:layout_width="255dp"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >
    
                    <TextView
                        android:id="@+id/title"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Video1"
                        android:textAppearance="?android:attr/textAppearanceLarge"
                        android:textColor="#339966"
                        android:textStyle="bold" />
                </LinearLayout>
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >
    
                    <TextView
                        android:id="@+id/detail"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="video1"
                        android:textColor="#606060" />
                </LinearLayout>
            </LinearLayout>
    
            <ImageView
                android:id="@+id/img"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
    
        </LinearLayout>
    
    </LinearLayout>
    

    main.java:

    package com.example.sample;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    
    
    public class MainActivity extends Activity {
    
        ListView l1;
        String[] t1={"video1","video2"};
        String[] d1={"lesson1","lesson2"};
        int[] i1 ={R.drawable.ic_launcher,R.drawable.ic_launcher};
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            l1=(ListView)findViewById(R.id.list);
            l1.setAdapter(new dataListAdapter(t1,d1,i1));
        }
    
        class dataListAdapter extends BaseAdapter {
            String[] Title, Detail;
            int[] imge;
    
            dataListAdapter() {
                Title = null;
                Detail = null;
                imge=null;
            }
    
            public dataListAdapter(String[] text, String[] text1,int[] text3) {
                Title = text;
                Detail = text1;
                imge = text3;
    
            }
    
            public int getCount() {
                // TODO Auto-generated method stub
                return Title.length;
            }
    
            public Object getItem(int arg0) {
                // TODO Auto-generated method stub
                return null;
            }
    
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }
    
            public View getView(int position, View convertView, ViewGroup parent) {
    
                LayoutInflater inflater = getLayoutInflater();
                View row;
                row = inflater.inflate(R.layout.custom, parent, false);
                TextView title, detail;
                ImageView i1;
                title = (TextView) row.findViewById(R.id.title);
                detail = (TextView) row.findViewById(R.id.detail);
                i1=(ImageView)row.findViewById(R.id.img);
                title.setText(Title[position]);
                detail.setText(Detail[position]);
                i1.setImageResource(imge[position]);
    
                return (row);
            }
        }
    }
    

    Try this.

    0 讨论(0)
  • 2020-11-22 17:15
    public class ListElementAdapter extends BaseAdapter{
    
        String[] data;
        Context context;
        LayoutInflater layoutInflater;
    
    
        public ListElementAdapter(String[] data, Context context) {
            super();
            this.data = data;
            this.context = context;
            layoutInflater = LayoutInflater.from(context);
        }
    
        @Override
        public int getCount() {
    
            return data.length;
        }
    
        @Override
        public Object getItem(int position) {
    
            return null;
        }
    
        @Override
        public long getItemId(int position) {
    
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
    
            convertView= layoutInflater.inflate(R.layout.item, null);
    
            TextView txt=(TextView)convertView.findViewById(R.id.text);
    
            txt.setText(data[position]);
    
    
    
            return convertView;
        }
    }
    

    Just call ListElementAdapter in your Main Activity and set Adapter to ListView.

    0 讨论(0)
提交回复
热议问题