Android界面编程之BaseAdapter

SimpleAdapter和BaseAdapter同属于Adapter的子类
BaseAdapter简介
BaseAdapter是实现了ListAdapter和SpinnerAdapter两个接口,当然它也可以直接给ListView和Spinner等UI组件直接提供数据。
相关类结构如下图所示:
这里写图片描述
示例:
实现listview并且定位item中的view,当点击时,出现作者名字
这里写图片描述 这里写图片描述
直接在MainActivity中写

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView list1 = (ListView)findViewById(R.id.listview1);
        final String[] booknames = new String[]{"月童度河","我喜欢生命本来的样子","重温最美古诗词(再版)"};
        final String[] bookinfos = new  String[]{"这是一种如实和行进的写作,如同灌注之前," +
                "把容器清洁。只愿在时间中慢慢成为单纯的人。随书附赠精美书签。"
                ,"影响和改变万千年轻人对人生的思考和生活的态度!裸书脊精装,四色印刷," +
                "著名自由摄影师林帝浣插图,但愿你保持住一份生命的本色!"
                ,"继《〈论语〉心得》后又一经典作品,于丹17年古诗词积淀,首度爆发!2016纪念再版重磅推出! "};
        final String[] bookzuozhe = new  String[]{"安妮宝贝","周国平","于丹"};
        final int[] bookimages = new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3};
        BaseAdapter adapter1 = new BaseAdapter() {
            private int count =3;
            @Override
            public int getCount() {
                return count;
            }

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

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

            @Override
            public View getView(int i, View view, ViewGroup viewGroup) {
                LinearLayout layout = new LinearLayout(getApplicationContext());
                layout.setOrientation(LinearLayout.HORIZONTAL);
                ImageView image = new ImageView(getApplicationContext());
                image.setImageResource(bookimages[i]);
                layout.addView(image);
                LinearLayout layout1 = new LinearLayout(getApplicationContext());
                layout1.setOrientation(LinearLayout.VERTICAL);
                TextView text = new TextView(getApplicationContext());
                text.setText(booknames[i]);
                text.setTextColor(getResources().getColor(R.color.colorPrimary));
                layout1.addView(text);
                TextView text1 = new TextView(getApplicationContext());
                text1.setText(bookinfos[i]);
                layout1.addView(text1);
                text1.setTextColor(getResources().getColor(R.color.colorPrimary));
                TextView text2 = new TextView(getApplicationContext());
                text2.setId(R.id.zuozhe);
                text2.setTextColor(getResources().getColor(R.color.colorAccent));
                layout1.addView(text2);

                layout.addView(layout1);
                return layout;
            }
        };
        list1.setAdapter(adapter1);

        list1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                TextView zuozhe = (TextView)view.findViewById(R.id.zuozhe);
                zuozhe.setText(bookzuozhe[i]);
            }
        });
    }
}

需要注意一点,在这里直接获取作者的TextView是获取不到的,需要给其增加一个ID
此时就需要对视图使用方法setID(ID):
text2.setId(R.id.zuozhe);
并且需要新建一个资源文件:
这里写图片描述

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="zuozhe" type="id"></item>
</resource

如此才能通过getId方法定位

猜你喜欢

转载自blog.csdn.net/feiqinbushizheng/article/details/78847309