点击listView中的item,获取一种focus的状态。
方法:在adapter中添加动态布局,两个方法。
1是添加focusView
2是添加NormalView
一:布局
只是单纯的一个listView
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
二 adapter
public class FocusAdapter extends BaseAdapter {
private Context mContext;
private List<String> mdata = new ArrayList<String>();
private LayoutInflater inflater;
private int mCurrentItem;
private ListView mListView;
public FocusAdapter(Context mContext, List<String> data, ListView listView) {
this.mContext = mContext;
this.mdata = data;
this.mListView = listView;
inflater =LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return mdata.size();
}
@Override
public Object getItem(int i) {
return mdata.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
public void setCurrentItem(int position){
mCurrentItem =position;
}
//通过判断点击的位置,加载不同的布局。
@Override
public View getView(int position, View convertVIew, ViewGroup viewGroup) {
LinearLayout layout =new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
if(mCurrentItem == position){
layout.addView(addFocusView(position));
}else{
layout.addView(addNormalView(position));
}
return layout;
}
/**
* /添加获取焦点的布局
* 重点是这两个方法
*/
private View addFocusView(int i){
ImageView iv = new ImageView(mContext);
iv.setImageResource(R.drawable.ic_launcher);
return iv;
}
/**
* 添加未获得焦点布局
* 重点是这两个方法
* @param i
* @return
*/
private View addNormalView (int i){
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.HORIZONTAL);
ImageView iv = new ImageView(mContext);
iv.setImageResource(R.drawable.log);
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;
}
三 activity中点击item
在点击item后并没有调用getView()方法,必须通过adapter的notifyDataSetChanged()
的方法,刷新布局。
public class MainActivity extends AppCompatActivity {
private FocusAdapter adapter;
private ListView mListView;
private List<String> mdata;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listView);
mdata = new ArrayList<String>();
for(int i =0;i<25;i++){
mdata.add("This is an item"+i);
}
adapter = new FocusAdapter(this,mdata,mListView);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
adapter.setCurrentItem(position);
adapter.notifyDataSetChanged();
}
});
}