首页 文章

列表视图的自定义适配器

提问于
浏览
200

我想为列表视图创建一个 custom adapter . 是否有任何文章可以指导我如何创建一个并解释它是如何工作的?

13 回答

  • 13

    您可以在官方ApiDemos中查看this sample . 它显示了如何扩展 BaseAdapter 并将其应用于 ListView . 之后,只需查看 BaseAdapter 的引用,并尝试了解每个方法的作用(包括继承的方法)以及何时/如何使用它 .

    此外,Google是你的朋友:) .

  • 33
    public class ListAdapter extends ArrayAdapter<Item> {
    
        private int resourceLayout;
        private Context mContext;
    
        public ListAdapter(Context context, int resource, List<Item> items) {
            super(context, resource, items);
            this.resourceLayout = resource;
            this.mContext = context;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            View v = convertView;
    
            if (v == null) {
                LayoutInflater vi;
                vi = LayoutInflater.from(mContext);
                v = vi.inflate(resourceLayout, null);
            }
    
            Item p = getItem(position);
    
            if (p != null) {
                TextView tt1 = (TextView) v.findViewById(R.id.id);
                TextView tt2 = (TextView) v.findViewById(R.id.categoryId);
                TextView tt3 = (TextView) v.findViewById(R.id.description);
    
                if (tt1 != null) {
                    tt1.setText(p.getId());
                }
    
                if (tt2 != null) {
                    tt2.setText(p.getCategory().getId());
                }
    
                if (tt3 != null) {
                    tt3.setText(p.getDescription());
                }
            }
    
            return v;
        }
    
    }
    

    这是我用于项目的课程 . 您需要拥有要显示的项目集合,在我的情况下,它是 <Item> . 您需要覆盖 View getView(int position, View convertView, ViewGroup parent) 方法 .

    R.layout.itemlistrow 定义 ListView 的行 .

    <?xml version="1.0" encoding="utf-8"?>
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_height="wrap_content" android:orientation="vertical"
        android:layout_width="fill_parent">
    
        <TableRow android:layout_width="fill_parent"
                  android:id="@+id/TableRow01"
                  android:layout_height="wrap_content">
    
            <TextView android:textColor="#FFFFFF"
                      android:id="@+id/id"
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:text="id" android:textStyle="bold" 
                      android:gravity="left"
                      android:layout_weight="1" 
                      android:typeface="monospace"
                      android:height="40sp" />
        </TableRow>
    
        <TableRow android:layout_height="wrap_content"
                  android:layout_width="fill_parent">
    
            <TextView android:textColor="#FFFFFF" 
                      android:id="@+id/categoryId"
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:text="categoryId" 
                      android:layout_weight="1" 
                      android:height="20sp" />
    
            <TextView android:layout_height="wrap_content"
                      android:layout_width="fill_parent" 
                      android:layout_weight="1"
                      android:textColor="#FFFFFF"
                      android:gravity="right"
                      android:id="@+id/description"
                      android:text="description" 
                      android:height="20sp" />
        </TableRow>
    
    </TableLayout>
    

    MainActivity 这样定义 ListView

    ListView yourListView = (ListView) findViewById(R.id.itemListView);
    
    // get data from the table by the ListAdapter
    ListAdapter customAdapter = new ListAdapter(this, R.layout.itemlistrow, List<yourItem>);
    
    yourListView .setAdapter(customAdapter);
    
  • 7

    我知道这已经得到了解答......但我想提供一个更完整的例子 .

    在我的示例中,将显示我们的自定义 ListViewListActivity 被称为 OptionsActivity ,因为在我的项目中, Activity 将显示我的用户可以设置来控制我的应用程序的不同选项 . 有两个列表项类型,一个列表项类型只有 TextView ,第二个列表项类型只有 Button . 您可以在每个列表项类型中放置任何您喜欢的小部件,但我保持这个示例简单 .

    getItemView() 方法检查哪些列表项应该是类型1或类型2.根据我的静态int我定义了top,前5个列表项将是列表项类型1,最后5个列表项将是列表项类型2.因此,如果你编译并运行它,你将有一个 ListView ,其中有五个项目只包含 Button ,然后是五个只包含 TextView 的项目 .

    下面是 Activity 代码,活动xml文件以及每个列表项类型的xml文件 .

    OptionsActivity.java:

    public class OptionsActivity extends ListActivity {
    
        private static final int LIST_ITEM_TYPE_1 = 0;
        private static final int LIST_ITEM_TYPE_2 = 1;
        private static final int LIST_ITEM_TYPE_COUNT = 2;
    
        private static final int LIST_ITEM_COUNT = 10;
        // The first five list items will be list item type 1 
        // and the last five will be list item type 2
        private static final int LIST_ITEM_TYPE_1_COUNT = 5;
    
        private MyCustomAdapter mAdapter;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mAdapter = new MyCustomAdapter();
            for (int i = 0; i < LIST_ITEM_COUNT; i++) {
              if (i < LIST_ITEM_TYPE_1_COUNT)
                mAdapter.addItem("item type 1");
              else
                mAdapter.addItem("item type 2");
            }
            setListAdapter(mAdapter);
        }
    
        private class MyCustomAdapter extends BaseAdapter {
    
            private ArrayList<String> mData = new ArrayList<String>();
            private LayoutInflater mInflater;
    
            public MyCustomAdapter() {
                mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }
    
            public void addItem(final String item) {
                mData.add(item);
                notifyDataSetChanged();
            }
    
            @Override
            public int getItemViewType(int position) {
              if(position < LIST_ITEM_TYPE_1_COUNT)
                  return LIST_ITEM_TYPE_1;
              else
                  return LIST_ITEM_TYPE_2;
            }
    
            @Override
            public int getViewTypeCount() {
                return LIST_ITEM_TYPE_COUNT;
            }
    
            @Override
            public int getCount() {
                return mData.size();
            }
    
            @Override
            public String getItem(int position) {
                return mData.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder holder = null;
                int type = getItemViewType(position);
                if (convertView == null) {
                    holder = new ViewHolder();
                    switch(type) {
                        case LIST_ITEM_TYPE_1:
                            convertView = mInflater.inflate(R.layout.list_item_type1, null);
                            holder.textView = (TextView)convertView.findViewById(R.id.list_item_type1_text_view);
                            break;
                        case LIST_ITEM_TYPE_2:
                            convertView = mInflater.inflate(R.layout.list_item_type2, null);
                            holder.textView = (TextView)convertView.findViewById(R.id.list_item_type2_button);
                            break;
                    }
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder)convertView.getTag();
                }
                holder.textView.setText(mData.get(position));
                return convertView;
            }
    
        }
    
        public static class ViewHolder {
            public TextView textView;
        }
    
    }
    

    activity_options.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
         >
    
        <ListView
            android:id="@+id/optionsList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>
    
    </LinearLayout>
    

    list_item_type_1.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list_item_type1_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/list_item_type1_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Text goes here" />
    
    </LinearLayout>
    

    list_item_type2.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list_item_type2_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/list_item_type2_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button text goes here" />
    
    </LinearLayout>
    
  • 0

    这段代码很容易理解 .

    three_horizontal_text_views_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/leftTextView"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/centreTextView"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rightTextView"/>
    
    </LinearLayout>
    

    ThreeStrings.java

    public class ThreeStrings {
        private String left;
        private String right;
        private String centre;
    
        public ThreeStrings(String left, String right, String centre) {
            this.left = left;
            this.right = right;
            this.centre = centre;
        }
    }
    

    ThreeHorizontalTextViewsAdapter.java

    public class ThreeHorizontalTextViewsAdapter extends ArrayAdapter<ThreeStrings> {
    
    private int layoutResource;
    
    public ThreeHorizontalTextViewsAdapter(Context context, int layoutResource, List<ThreeStrings> threeStringsList) {
        super(context, layoutResource, threeStringsList);
        this.layoutResource = layoutResource;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        View view = convertView;
    
        if (view == null) {
            LayoutInflater layoutInflater = LayoutInflater.from(getContext());
            view = layoutInflater.inflate(layoutResource, null);
        }
    
        ThreeStrings threeStrings = getItem(position);
    
        if (threeStrings != null) {
            TextView leftTextView = (TextView) view.findViewById(R.id.leftTextView);
            TextView rightTextView = (TextView) view.findViewById(R.id.rightTextView);
            TextView centreTextView = (TextView) view.findViewById(R.id.centreTextView);
    
            if (leftTextView != null) {
                leftTextView.setText(threeStrings.getLeft());
            }
            if (rightTextView != null) {
                rightTextView.setText(threeStrings.getRight());
            }
            if (centreTextView != null) {
                centreTextView.setText(threeStrings.getCentre());
            }
        }
    
        return view;
    }
          }
    

    main_layout.xml

    <LinearLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:orientation="vertical"
        tools:context="com.androidapplication.ListActivity">
    
    
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/listView"></ListView>
    
    </LinearLayout>
    

    MainActivity.java

    public class MainActivity extends Activity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            List<ThreeStrings> threeStringsList = new ArrayList<>();
            ThreeStrings threeStrings = new ThreeStrings("a", "b", "c");
            threeStringsList.add(threeStrings);        
            ListView listView = (ListView)findViewById(R.id.listView);
            ThreeHorizontalTextViewsAdapter threeHorizontalTextViewsAdapter = new ThreeHorizontalTextViewsAdapter(this, R.layout.three_horizontal_text_views_layout, threeStringsList);
            listView.setAdapter(threeHorizontalTextViewsAdapter);
          }
       //......}
    
  • 0

    谷歌有一个名为EfficientAdapter的例子,我认为这是如何实现自定义适配器的最简单的例子 . http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html @CommonsWare已经对上面例子中使用的模式做了很好的解释http://commonsware.com/Android/excerpt.pdf

  • 3

    check this link,非常简单,通过 convertView ,我们可以获得将在listview中显示的行的布局(即 parentView ) .

    View v = convertView;
    
    if (v == null) {
    
        LayoutInflater vi;
        vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.itemlistrow, null);
    
    }
    

    使用该位置,您可以获得 List<Item> 的对象 .

    Item p = items.get(position);
    

    之后,我们必须将对象的所需细节设置为已识别的表单小部件 .

    if (p != null) {
    
        TextView tt = (TextView) v.findViewById(R.id.id);
        TextView tt1 = (TextView) v.findViewById(R.id.categoryId);
        TextView tt3 = (TextView) v.findViewById(R.id.description);
    
        if (tt != null) {
            tt.setText(p.getId());
        }
        if (tt1 != null) {
    
            tt1.setText(p.getCategory().getId());
        }
        if (tt3 != null) {
    
            tt3.setText(p.getDescription());
        }
    }
    

    然后它将返回将附加到 parentView (这是 ListView / GridView )的构造视图 .

  • -1

    以下是逐步创建列表视图的自定义适配器的完整步骤 -

    https://www.caveofprogramming.com/guest-posts/custom-listview-with-imageview-and-textview-in-android.html

    public class CustomAdapter extends BaseAdapter{   
        String [] result;
        Context context;
     int [] imageId;
          private static LayoutInflater inflater=null;
        public CustomAdapter(MainActivity mainActivity, String[] prgmNameList, int[] prgmImages) {
            // TODO Auto-generated constructor stub
            result=prgmNameList;
            context=mainActivity;
            imageId=prgmImages;
             inflater = ( LayoutInflater )context.
                     getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return result.length;
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        public class Holder
        {
            TextView tv;
            ImageView img;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            Holder holder=new Holder();
            View rowView;       
                 rowView = inflater.inflate(R.layout.program_list, null);
                 holder.tv=(TextView) rowView.findViewById(R.id.textView1);
                 holder.img=(ImageView) rowView.findViewById(R.id.imageView1);       
             holder.tv.setText(result[position]);
             holder.img.setImageResource(imageId[position]);         
             rowView.setOnClickListener(new OnClickListener() {            
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show();
                }
            });   
            return rowView;
        }
    
    }
    
  • 0

    数据模型

    public class DataModel {
        String name;
        String type;
        String version_number;
        String feature;
    
        public DataModel(String name, String type, String version_number, String feature ) {
            this.name=name;
            this.type=type;
            this.version_number=version_number;
            this.feature=feature;
    
        }
    
        public String getName() {
            return name;
        }
    
        public String getType() {
            return type;
        }
    
        public String getVersion_number() {
            return version_number;
        }
    
        public String getFeature() {
            return feature;
        }    
    }
    

    阵列适配器

    public class CustomAdapter extends ArrayAdapter<DataModel> implements View.OnClickListener{
        private ArrayList<DataModel> dataSet;
        Context mContext;
    
        // View lookup cache
        private static class ViewHolder {
            TextView txtName;
            TextView txtType;
            TextView txtVersion;
            ImageView info;
        }
    
        public CustomAdapter(ArrayList<DataModel> data, Context context) {
            super(context, R.layout.row_item, data);
            this.dataSet = data;
            this.mContext=context;
    
        }
    
        @Override
        public void onClick(View v) {
    
            int position=(Integer) v.getTag();
            Object object= getItem(position);
            DataModel dataModel=(DataModel)object;
    
            switch (v.getId())
            {
                case R.id.item_info:
                    Snackbar.make(v, "Release date " +dataModel.getFeature(), Snackbar.LENGTH_LONG)
                            .setAction("No action", null).show();
                    break;
            }
        }
    
        private int lastPosition = -1;
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // Get the data item for this position
            DataModel dataModel = getItem(position);
            // Check if an existing view is being reused, otherwise inflate the view
            ViewHolder viewHolder; // view lookup cache stored in tag
    
            final View result;
    
            if (convertView == null) {
    
                viewHolder = new ViewHolder();
                LayoutInflater inflater = LayoutInflater.from(getContext());
                convertView = inflater.inflate(R.layout.row_item, parent, null);
                viewHolder.txtName = (TextView) convertView.findViewById(R.id.name);
                viewHolder.txtType = (TextView) convertView.findViewById(R.id.type);
                viewHolder.txtVersion = (TextView) convertView.findViewById(R.id.version_number);
                viewHolder.info = (ImageView) convertView.findViewById(R.id.item_info);
    
                result=convertView;
    
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
                result=convertView;
            }
    
            Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
            result.startAnimation(animation);
            lastPosition = position;
    
            viewHolder.txtName.setText(dataModel.getName());
            viewHolder.txtType.setText(dataModel.getType());
            viewHolder.txtVersion.setText(dataModel.getVersion_number());
            viewHolder.info.setOnClickListener(this);
            viewHolder.info.setTag(position);
            // Return the completed view to render on screen
            return convertView;
        }
    }
    

    主要活动

    public class MainActivity extends AppCompatActivity {
    
        ArrayList<DataModel> dataModels;
        ListView listView;
        private static CustomAdapter adapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            listView=(ListView)findViewById(R.id.list);
    
            dataModels= new ArrayList<>();
    
            dataModels.add(new DataModel("Apple Pie", "Android 1.0", "1","September 23, 2008"));
            dataModels.add(new DataModel("Banana Bread", "Android 1.1", "2","February 9, 2009"));
            dataModels.add(new DataModel("Cupcake", "Android 1.5", "3","April 27, 2009"));
            dataModels.add(new DataModel("Donut","Android 1.6","4","September 15, 2009"));
            dataModels.add(new DataModel("Eclair", "Android 2.0", "5","October 26, 2009"));
            dataModels.add(new DataModel("Froyo", "Android 2.2", "8","May 20, 2010"));
            dataModels.add(new DataModel("Gingerbread", "Android 2.3", "9","December 6, 2010"));
            dataModels.add(new DataModel("Honeycomb","Android 3.0","11","February 22, 2011"));
            dataModels.add(new DataModel("Ice Cream Sandwich", "Android 4.0", "14","October 18, 2011"));
            dataModels.add(new DataModel("Jelly Bean", "Android 4.2", "16","July 9, 2012"));
            dataModels.add(new DataModel("Kitkat", "Android 4.4", "19","October 31, 2013"));
            dataModels.add(new DataModel("Lollipop","Android 5.0","21","November 12, 2014"));
            dataModels.add(new DataModel("Marshmallow", "Android 6.0", "23","October 5, 2015"));
    
            adapter= new CustomAdapter(dataModels,getApplicationContext());
    
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                    DataModel dataModel= dataModels.get(position);
    
                    Snackbar.make(view, dataModel.getName()+"\n"+dataModel.getType()+" API: "+dataModel.getVersion_number(), Snackbar.LENGTH_LONG)
                            .setAction("No action", null).show();
                }
            });
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, 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();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }
    

    row_item.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">
    
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:text="Marshmallow"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@android:color/black" />
    
    
        <TextView
            android:id="@+id/type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/name"
            android:layout_marginTop="5dp"
            android:text="Android 6.0"
            android:textColor="@android:color/black" />
    
        <ImageView
            android:id="@+id/item_info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@android:drawable/ic_dialog_info" />
    
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true">
    
            <TextView
                android:id="@+id/version_heading"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="API: "
                android:textColor="@android:color/black"
                android:textStyle="bold" />
    
            <TextView
                android:id="@+id/version_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="23"
                android:textAppearance="?android:attr/textAppearanceButton"
                android:textColor="@android:color/black"
                android:textStyle="bold" />
    
        </LinearLayout>
    
    </RelativeLayout>
    
  • 1

    一个更紧凑的自定义适配器示例(使用列表数组作为我的数据):

    class MyAdapter extends ArrayAdapter<Object> {
        public ArrayAdapter(Context context, List<MyObject> objectList) {
            super(context, R.layout.my_list_item, R.id.textViewTitle, objectList.toArray());
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = super.getView(position, convertView, parent);
            TextView title = (TextView) row.findViewById(R.id.textViewTitle);
            ImageView icon = (ImageView) row.findViewById(R.id.imageViewAccessory);
            MyObject obj = (MyObject) getItem(position);
            icon.setImageBitmap( ... );
            title.setText(obj.name);
            return row;
        }
    }
    

    这是如何使用它:

    List<MyObject> objectList = ...
    MyAdapter adapter = new MyAdapter(this.getActivity(), objectList);
    listView.setAdapter(adapter);
    
  • 0

    BaseAdapter 是listview的最佳自定义适配器 .

    Class MyAdapter extends BaseAdapter{}
    

    它有很多功能,如 getCount()getView() 等 .

  • 10

    这很简单 .

    import android.content.Context;
    import android.content.DialogInterface;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AlertDialog;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.util.List;
    
    /**
     * Created by Belal on 9/14/2017.
     */
    
    //we need to extend the ArrayAdapter class as we are building an adapter
    public class MyListAdapter extends ArrayAdapter<Hero> {
    
        //the list values in the List of type hero 
        List<Hero> heroList;
    
        //activity context 
        Context context;
    
        //the layout resource file for the list items
        int resource;
    
        //constructor initializing the values 
        public MyListAdapter(Context context, int resource, List<Hero> heroList) {
            super(context, resource, heroList);
            this.context = context;
            this.resource = resource;
            this.heroList = heroList;
        }
    
        //this will return the ListView Item as a View
        @NonNull
        @Override
        public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    
            //we need to get the view of the xml for our list item
            //And for this we need a layoutinflater
            LayoutInflater layoutInflater = LayoutInflater.from(context);
    
            //getting the view
            View view = layoutInflater.inflate(resource, null, false);
    
            //getting the view elements of the list from the view
            ImageView imageView = view.findViewById(R.id.imageView);
            TextView textViewName = view.findViewById(R.id.textViewName);
            TextView textViewTeam = view.findViewById(R.id.textViewTeam);
            Button buttonDelete = view.findViewById(R.id.buttonDelete);
    
            //getting the hero of the specified position
            Hero hero = heroList.get(position);
    
            //adding values to the list item 
            imageView.setImageDrawable(context.getResources().getDrawable(hero.getImage()));
            textViewName.setText(hero.getName());
            textViewTeam.setText(hero.getTeam());
    
            //adding a click listener to the button to remove item from the list
            buttonDelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //we will call this method to remove the selected value from the list
                    //we are passing the position which is to be removed in the method 
                    removeHero(position);
                }
            });
    
            //finally returning the view
            return view;
        }
    
        //this method will remove the item from the list 
        private void removeHero(final int position) {
            //Creating an alert dialog to confirm the deletion
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle("Are you sure you want to delete this?");
    
            //if the response is positive in the alert 
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
    
                    //removing the item 
                    heroList.remove(position);
    
                    //reloading the list 
                    notifyDataSetChanged();
                }
            });
    
            //if response is negative nothing is being done 
            builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
    
                }
            });
    
            //creating and displaying the alert dialog 
            AlertDialog alertDialog = builder.create();
            alertDialog.show();
        }
    }
    

    资料来源: Custom ListView Android Tutorial

  • 6
    public class CustomAdapter extends BaseAdapter{
    
        ArrayList<BookPojo> data;
        Context ctx;
        int index=0;
    
        public CustomAdapter(ArrayList<BookPojo> data, Context ctx) {
            super();
            this.data = data;
            this.ctx = ctx;
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return data.size();
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return data.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public View getView(int position, View convertview, ViewGroup parent) {
            // TODO Auto-generated method stub
            View v=convertview;
    
            if(v==null){
                LayoutInflater vi=LayoutInflater.from(ctx);
                v=vi.inflate(R.layout.messgeview,null);
    
            }
    
            RelativeLayout rlmessage=(RelativeLayout)v.findViewById(R.id.rlmessgeview);
    
            TextView tvisdn=(TextView)v.findViewById(R.id.tvisdn);
            TextView tvtitle=(TextView)v.findViewById(R.id.tvtitle);
            TextView tvauthor=(TextView)v.findViewById(R.id.tvauthor);
            TextView tvprice=(TextView)v.findViewById(R.id.tvprice);
    
            BookPojo bpj=data.get(position);
    
            tvisdn.setText(bpj.isdn+"");
            tvtitle.setText(bpj.title);
            tvauthor.setText(bpj.author);
            tvprice.setText(bpj.price+"");
    
            if(index%2==0)
            {
                rlmessage.setBackgroundColor(Color.BLUE);
            }
            else
            {
                rlmessage.setBackgroundColor(Color.YELLOW);
    
            }
    
            index++;
    
            return v;
        }
    }
    
  • 289
    import android.app.Activity;
    
    import android.content.Context;
    
    import android.text.Html;
    
    import android.view.LayoutInflater;
    
    import android.view.View;
    
    import android.view.ViewGroup;
    
    import android.widget.BaseAdapter;
    
    import android.widget.ImageView;
    
    import android.widget.TextView;
    
    import org.json.JSONObject;
    
    import java.util.ArrayList;
    
    public class OurteamAdapter extends BaseAdapter {
    
        Context cont;
        ArrayList<OurteamModel> llist;
        OurteamAdapter madap;
        LayoutInflater inflater;
        JsonHelper Jobj;
        String Id;
        JSONObject obj = null;
        int position = 0;
        public OurteamAdapter(Context c,ArrayList<OurteamModel> Mi)
        {
            this.cont = c;
            this.llist = Mi;
        }
        @Override
        public int getCount()
        {
            // TODO Auto-generated method stub
            return llist.size();
        }
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return llist.get(position);
        }
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent)
        {
            // TODO Auto-generated method stub
            if(convertView == null)
            {
                LayoutInflater in = (LayoutInflater) cont.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                convertView = in.inflate(R.layout.doctorlist, null);
            }
            TextView category = (TextView) convertView.findViewById(R.id.button1);
            TextView title = (TextView) convertView.findViewById(R.id.button2);
            ImageView i1=(ImageView) convertView.findViewById(R.id.imageView1);
            category.setText(Html.fromHtml(llist.get(position).getGalleryName()));
            title.setText(Html.fromHtml(llist.get(position).getGalleryDetail()));
            if(llist.get(position).getImagesrc()!=null)
            {
                i1.setImageBitmap(llist.get(position).getImagesrc());
            }
            else
            {
                i1.setImageResource(R.drawable.anandlogo);
            }
            return convertView;
        }
    
    }
    

相关问题