Android 彻底征服 ListView 五 动态改变ListView布局

来源:互联网 发布:淘宝全屏轮播素材女装 编辑:程序博客网 时间:2024/06/05 06:45

如果要动态地改变点击Item的布局来达到一个Focus的效果,有两种方法.
一种:将两种布局写在一起,通过控制布局的显示 隐藏,来达到切换布局的效果;
二种:在getView()的时候,通过判断来选择加载不同的布局.

public class FocusListViewAdapter extends BaseAdapter {    private List<String> mData;    private Context mContext;    private int mCurrentItem = 0;    public FocusListViewAdapter(Context context, List<String> data) {        this.mContext = context;        this.mData = data;    }    public int getCount() {        return mData.size();    }    public Object getItem(int position) {        return mData.get(position);    }    public long getItemId(int position) {        return position;    }    public View getView(int position, View convertView, ViewGroup parent) {        LinearLayout layout = new LinearLayout(mContext);        layout.setOrientation(LinearLayout.VERTICAL);        if (mCurrentItem == position) {            layout.addView(addFocusView(position));        } else {            layout.addView(addNormalView(position));        }        return layout;    }    public void setCurrentItem(int currentItem) {        this.mCurrentItem = currentItem;    }    private View addFocusView(int i) {        ImageView iv = new ImageView(mContext);        iv.setImageResource(R.drawable.ic_launcher);        return iv;    }    private View addNormalView(int i) {        LinearLayout layout = new LinearLayout(mContext);        layout.setOrientation(LinearLayout.HORIZONTAL);        ImageView iv = new ImageView(mContext);        iv.setImageResource(R.drawable.in_icon);        layout.addView(iv, new LinearLayout.LayoutParams(                LinearLayout.LayoutParams.WRAP_CONTENT,                LinearLayout.LayoutParams.WRAP_CONTENT));        TextView tv = new TextView(mContext);        tv.setText(mData.get(i));        layout.addView(tv, new LinearLayout.LayoutParams(                LinearLayout.LayoutParams.WRAP_CONTENT,                LinearLayout.LayoutParams.WRAP_CONTENT));        layout.setGravity(Gravity.CENTER);        return layout;    }}
0 0