
我这周上网看到动态增加listview的每一项item的布局,今天抽空自己写了一个,方便自己日后使用,这个效果还是很不错的,用到了Adapter的notifyDataSetChanged()方法,当点击每一个Item的时候,就通知adapter更新getView,系统得到通知就相应的加载一遍布局,就达到了动态加载item布局的效果。希望给大家带来点启迪,有问题或想要代码的可以留言,欢迎大家留言谈论listview的一些知识,以求共同进步,转载请标明出处:
http://blog.****.net/wdaming1986/article/details/6787455
程序开启界面,默认选中贝贝item, 点击晶晶后的界面的效果,
点击欢欢后界面的效果: 点击迎迎后界面的效果:
点击妮妮后界面的效果:
代码奉上,真理还得看代码:
在ListViewRunDemo工程中,
com.cn.daming包中的MainActivity.java类中的代码:
package com.cn.daming; import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; public class MainActivity extends ListActivity { private ListAddLayoutAdapter mAdapter;
@SuppressWarnings("unused")
private LayoutInflater lInflater;; int[] image = {
R.drawable.s_beibei,
R.drawable.s_jingjing,
R.drawable.s_huanhuan,
R.drawable.s_yingying,
R.drawable.s_nini
}; String[] show_name = {
"贝贝",
"晶晶",
"欢欢",
"迎迎",
"妮妮"
}; private int id = 0;
@SuppressWarnings("unused")
private int last = 0; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdapter = new ListAddLayoutAdapter(this);
this.setListAdapter(mAdapter); this.getListView().setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
id = position;
mAdapter.notifyDataSetChanged();
last = position;
}
});
} public class ListAddLayoutAdapter extends BaseAdapter { private Context context;
private MainActivity activity; public ListAddLayoutAdapter(Context context) {
this.context = context;
this.activity = (MainActivity)context;
lInflater = activity.getLayoutInflater();
} public int getCount() {
return image.length;
} public Object getItem(int arg0) {
return null;
} public long getItemId(int position) {
return position;
} public View getView(int position, View arg1, ViewGroup arg2) {
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(0, 8, 0, 8); layout.addView(addTitleView(position)); if(id==position){
layout.addView(addCustomView(position));
} return layout;
} public View addTitleView(int i){
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.HORIZONTAL); ImageView iv = new ImageView(context);
iv.setImageResource(image[i]);
layout.addView(iv,
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT)); TextView tv = new TextView(context);
tv.setText(show_name[i]);
tv.setTextSize(18f);
layout.addView(tv,
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT)); layout.setGravity(Gravity.CENTER);
return layout;
} public View addCustomView(int i){
View view = new View(context); switch(i){
case 0:
ImageView iv1 = new ImageView(context);
iv1.setImageResource(R.drawable.beibei);
view = iv1;
break; case 1:
ImageView iv2 = new ImageView(context);
iv2.setImageResource(R.drawable.jingjing);
view = iv2;
break; case 2:
ImageView iv3= new ImageView(context);
iv3.setImageResource(R.drawable.huanhuan);
view = iv3;
break;
case 3:
ImageView iv4 = new ImageView(context);
iv4.setImageResource(R.drawable.yingying);
view = iv4;
break;
case 4:
ImageView iv5 = new ImageView(context);
iv5.setImageResource(R.drawable.nini);
view = iv5;
break;
}
return view;
}
}
}
说明:也可以动态加载布局文件也可以的:
在addCustomView()方法中这么写也是可以的:
工程的图片没有上传,希望大家自己找些图片就可以了: