这里需要研究的一个问题时:实现如下功能:
点击一个item的时候显示一张图,其他item显示一张图和一个textView,动态改变点击item的布局达到一个focus的效果。。
这个效果实现的关键还是BaseAdapter:给item设置两个不同的布局——focus和normal。
private View addFocusView(int i)
{
ImageView iv = new ImageView(context);
iv.setImageResource(R.drawable.ic_launcher);
return iv;
}
private View addNormalView(int i)
{
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.HORIZONTAL);
ImageView iv = new ImageView(context);
iv.setImageResource(R.drawable.ic_launcher);
layout.addView(iv,new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
TextView tv = new TextView(context);
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;
}
下面回到BaseAdapter,在getView()方法中,通过判断点击的位置来改变相应的视图:
<pre name="code" class="java"> public View getView(int position, View convertView, ViewGroup parent)
{
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);
if(mCurrentItem == position)
{
layout.addView(addFocusView(position));
}else {
layout.addView(addNormalView(position));
}
return layout;
}
当然,你在点击的时候listView需要刷新,
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
adapter.setCurrentItem(position);
adapter.notifyDataSetChanged();
}
});