自定义适配器

接着昨天的内容,如果想要定义更复杂的ListView怎么办,如果需要在列表中加入图片选择框以及按钮呢?我们改如何定义?修改布局文件已经不够用了,现在我们需要自定义适配器

首先新建一个·Activity

public class MainActivity extends ListActivity {
 
 String[] strs = {"aa","xx","ss","dd","ff","gg","hh","jj"};
 private ListView listview;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
    
 }

我们在activity_main布局中放一个listview就可以了

<ListView 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:id="@+id/list_view"
    tools:context=".MainActivity" >

</ListView>

现在获取布局在activity显示出来

  listview.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, strs));
  listview.setOnItemClickListener(listener);
  listview.setAdapter(new MyAdapter());

如果想添加按钮,像昨天一样,我们依然可以使用昨天的方法设置权重

<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"
    tools:context=".MainActivity" 
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/lianxi_ren" 
        android:layout_weight="0"/>
    <ListView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/list_view"
        android:layout_weight="1"></ListView>
    <Button 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="button"
        android:layout_weight="0"/>
</LinearLayout>

接下来我们开始自定义布局,丰富我们listview每一行的元素,现在我们数组适配器之能是一行textview

我们现在使用自定义适配器来改变我们的listview

首先我们把刚才的数组适配器注释掉 ,获取当前控件id

 listview= (ListView)  findViewById(R.id.list_view);
//  listview.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, strs));
//  listview.setOnItemClickListener(listener);
  listview.setAdapter(new MyAdapter());

下面构建一个新的类MyAdpater继承BaseAdapter

public class MyAdapter  extends BaseAdapter{
  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   return 0;
  }
  @Override
  public Object getItem(int position) {
   // TODO Auto-generated method stub
   return null;
  }
  @Override
  public long getItemId(int position) {
   // TODO Auto-generated method stub
   return 0;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {

   return 0;
  }
  
 }

我们在这里定义显示的ListView行数

  public int getCount() {
   // TODO Auto-generated method stub
   return 5;
  }

先显示5行,通过getview来显示每一行的内容

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
 TODO Auto-generated method stub
   ImageView image = new ImageView (MainActivity.this);
  image .setImageResource(R.drawable.ic_launcher);
  System.out.println("getView"+position);
   return image;

  }

position行号

convertView当前行view

ViewGroup整体的listview

接下来我们设置更复杂的布局

先修改布局文件

 <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"
    tools:context=".MainActivity" 
    android:orientation="vertical">
    <TextView 
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="mjl"
        />
    <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image"
        android:src="@drawable/ic_launcher"
        />
    <CheckBox 
        android:id="@+id/check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

在getView中获取显示出来

View view =View.inflate(MainActivity.this, R.layout.activity_main, null);
   return view;

下面展示出来所有代码

 package com.example.listview;
import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
public class MainActivity extends ListActivity {
 
 String[] strs = {"aa","xx","ss","dd","ff","gg","hh","jj"};
 private ListView listview;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  listview= (ListView)  findViewById(R.id.list_view);
//  listview.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, strs));
//  listview.setOnItemClickListener(listener);
  listview.setAdapter(new MyAdapter());
 }
 public class MyAdapter  extends BaseAdapter{
  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   return 3;
  }
  @Override
  public Object getItem(int position) {
   // TODO Auto-generated method stub
   return null;
  }
  @Override
  public long getItemId(int position) {
   // TODO Auto-generated method stub
   return 0;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   // TODO Auto-generated method stub
//   ImageView image = new ImageView (MainActivity.this);
//   image .setImageResource(R.drawable.ic_launcher);
//   System.out.println("getView"+position);
   View view =View.inflate(MainActivity.this, R.layout.activity_main, null);
//   return image;
   return view;
  }
  
 }
}

第一部分布局

<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"
    tools:context=".MainActivity" 
    android:orientation="vertical">
    <TextView 
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="mjl"
        />
    <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image"
        android:src="@drawable/ic_launcher"
        />
    <CheckBox 
        android:id="@+id/check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

第二部分

 <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"
    tools:context=".MainActivity" 
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/lianxi_ren" 
        android:layout_weight="0"/>
    <ListView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/list_view"
        android:layout_weight="1"></ListView>
    <Button 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="button"
        android:layout_weight="0"/>
</LinearLayout>
<!--  
<ListView 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:id="@+id/list_view"
    tools:context=".MainActivity" >

</ListView>
-->

转载于:https://my.oschina.net/u/2502566/blog/529618

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值