您的位置:首页 > 其它

ListView动态添加控件

2015-08-10 11:38 483 查看

在项目中有时候要用到ListView动态添加一些Item,今天研究了一下,一贯还是使用BaseAdapter
创建一个AddNumberBaseAdpater类用来适配ListView

[java]
view plaincopyprint?

import java.util.ArrayList;  
import android.content.Context;  
import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.BaseAdapter;  
import android.widget.EditText;  
import android.widget.ImageButton;  
  
import com.example.mobilephone.R;  
  
public class AddNumberBaseAdpater extends BaseAdapter {  
  
 private LayoutInflater mInflater;  
 private ArrayList<String> text;  
  
 public AddNumberBaseAdpater(Context context) {  
  text = new ArrayList<String>();  
  text.add("第一项");// 默认只加载一个Item  
  this.mInflater = LayoutInflater.from(context);  
 }  
  
 public int getCount() {  
  // TODO Auto-generated method stub  
  return text.size();  
 }  
  
 public Object getItem(int position) {  
  // TODO Auto-generated method stub  
  return text.get(position);  
 }  
  
 public long getItemId(int position) {  
  // TODO Auto-generated method stub  
  return position;  
 }  
  
 public View getView(final int position, View convertView, ViewGroup parent) {  
  // TODO Auto-generated method stub  
  ViewHolder holder = new ViewHolder();  
  if (convertView == null) {  
   convertView = mInflater.inflate(R.layout.addnumber, null);  
   holder.btnOpen = (ImageButton) convertView  
     .findViewById(R.id.ibtnAddNumber);  
   holder.editText = (EditText) convertView  
     .findViewById(R.id.editNumber);  
   convertView.setTag(holder);  
  } else {  
   holder = (ViewHolder) convertView.getTag();  
  }  
  switch (position) {// 不要以为XML文件中是2个按钮,其实只有一个  
  case 0:  
   holder.btnOpen.setBackgroundResource(R.drawable.addnumber);// 第一项按钮则显示加号图片  
   break;  
  
  default:  
   holder.btnOpen.setBackgroundResource(R.drawable.deletenumber);// 超过了一项则显示减号图片,可以删除  
   break;  
  }  
  holder.btnOpen.setOnClickListener(new View.OnClickListener() {// 添加按钮  
  
     public void onClick(View v) {  
      if (position == 0) {  
       text.add("xxx");// 添加一项控件  
  
      } else if (position > 0) {// 始终留一项不能删除  
  
       text.remove(text.size() - 1);// 删除按钮  
      }  
      notifyDataSetChanged();  
     }  
    });  
  
  return convertView;  
 }  
  
 public final class ViewHolder {  
  public EditText editText;  
  public ImageButton btnOpen;  
  
 }  
}  
  
  
   

import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageButton;

import com.example.mobilephone.R;

public class AddNumberBaseAdpater extends BaseAdapter {

private LayoutInflater mInflater;
private ArrayList<String> text;

public AddNumberBaseAdpater(Context context) {
text = new ArrayList<String>();
text.add("第一项");// 默认只加载一个Item
this.mInflater = LayoutInflater.from(context);
}

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

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

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

public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = new ViewHolder();
if (convertView == null) {
convertView = mInflater.inflate(R.layout.addnumber, null);
holder.btnOpen = (ImageButton) convertView
.findViewById(R.id.ibtnAddNumber);
holder.editText = (EditText) convertView
.findViewById(R.id.editNumber);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
switch (position) {// 不要以为XML文件中是2个按钮,其实只有一个
case 0:
holder.btnOpen.setBackgroundResource(R.drawable.addnumber);// 第一项按钮则显示加号图片
break;

default:
holder.btnOpen.setBackgroundResource(R.drawable.deletenumber);// 超过了一项则显示减号图片,可以删除
break;
}
holder.btnOpen.setOnClickListener(new View.OnClickListener() {// 添加按钮

public void onClick(View v) {
if (position == 0) {
text.add("xxx");// 添加一项控件

} else if (position > 0) {// 始终留一项不能删除

text.remove(text.size() - 1);// 删除按钮
}
notifyDataSetChanged();
}
});

return convertView;
}

public final class ViewHolder {
public EditText editText;
public ImageButton btnOpen;

}
}


主MainActivity

[java]
view plaincopyprint?

import android.app.Activity;  
import android.os.Bundle;  
import android.widget.ListView;  
  
import com.example.mobilephone.adpater.AddNumberBaseAdpater;  
  
public class MainActivity extends Activity {  
  
    private ListView myList; // ListView控件   
  
    private AddNumberBaseAdpater addNumberBaseAdpater;  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.moble_input);   
        addNumberBaseAdpater=new AddNumberBaseAdpater(getApplicationContext());  
        myList = (ListView) findViewById(R.id.listview1);  
        myList.setAdapter(addNumberBaseAdpater);  
  
    }  
}  

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

import com.example.mobilephone.adpater.AddNumberBaseAdpater;

public class MainActivity extends Activity {

private ListView myList; // ListView控件

private AddNumberBaseAdpater addNumberBaseAdpater;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.moble_input);
addNumberBaseAdpater=new AddNumberBaseAdpater(getApplicationContext());
myList = (ListView) findViewById(R.id.listview1);
myList.setAdapter(addNumberBaseAdpater);

}
}

  自定义XML文件

[html]
view plaincopyprint?

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@+id/relativeNumber"  
    android:layout_width="500px"  
    android:layout_height="100px"  
    android:layout_below="@+id/relativeLayout1"  
    android:layout_centerHorizontal="true"  
    android:layout_marginTop="20dp" >  
  
    <EditText  
        android:id="@+id/editNumber"  
        android:layout_width="300px"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"  
        android:layout_alignParentLeft="true"  
        android:gravity="center_vertical"  
        android:layout_centerHorizontal="true"  
        android:layout_marginLeft="16dp"  
        android:background="@drawable/number_input"  
        android:ems="10" />  
  
    <ImageButton  
        android:id="@+id/ibtnAddNumber"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"  
        android:focusable="true"           
        android:layout_toRightOf="@+id/editNumber"  
        android:background="@drawable/addnumber" />   
</RelativeLayout>  

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeNumber"
android:layout_width="500px"
android:layout_height="100px"
android:layout_below="@+id/relativeLayout1"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp" >

<EditText
android:id="@+id/editNumber"
android:layout_width="300px"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:gravity="center_vertical"
android:layout_centerHorizontal="true"
android:layout_marginLeft="16dp"
android:background="@drawable/number_input"
android:ems="10" />

<ImageButton
android:id="@+id/ibtnAddNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:focusable="true"
android:layout_toRightOf="@+id/editNumber"
android:background="@drawable/addnumber" />
</RelativeLayout>


主XML文件

[html]
view plaincopyprint?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:background="#FFFFFF"   
    android:orientation="vertical" >  
    <ListView  
        android:id="@+id/listview1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:cacheColorHint="#00000000"  
        android:layout_centerHorizontal="true"  
        android:divider="#FFFFFF"  
        android:dividerHeight="0px"  
        android:fadingEdge="none"  
        android:listSelector="#00000000"  >   
    </ListView>  
  
     <TextView  
         android:id="@+id/textVie"  
         android:layout_width="wrap_content"  
         android:layout_height="wrap_content"  
         android:layout_centerHorizontal="true"  
         android:layout_below="@+id/listview1"  
         android:text="@string/input"  
         android:textSize="18dp" />  
      
</RelativeLayout>  

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical" >
<ListView
android:id="@+id/listview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
android:layout_centerHorizontal="true"
android:divider="#FFFFFF"
android:dividerHeight="0px"
android:fadingEdge="none"
android:listSelector="#00000000"  >
</ListView>

<TextView
android:id="@+id/textVie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@+id/listview1"
android:text="@string/input"
android:textSize="18dp" />

</RelativeLayout>


 

最后运行效果如下,第一次显示



点击加号按钮后运行效果如下:



点击减号删除

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: