GridView一般是显示九宫格效果之类的,今天因为项目需求做了调整,但是突然发现好多 东西已经不适合了,于是借鉴了案例后做了更改,本编的效果就是默认显示GridView中的第5个item,点击另一个item变色后,原来的item恢复过来,类似于腾讯视频的选集效果,而且一般点击变色是通过创建selector 类型 的xml文件来操作的而本片的博客是直接在适配器中判断,不需要那么多的步骤,以下就是要实现的效果图,至于GridView中的一些其他属性我这里就不一一描述了
1.在将要显示的页面中添加GridView控件
<GridView
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"
android:id="@+id/faGrid"
android:numColumns="4"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"></GridView>
2. 添加要在GridView中显示的item布局(本人的是一个单纯的TextView)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_height="wrap_content">
<TextView
android:gravity="center"
android:id="@+id/texts"
android:layout_width="60dp"
android:layout_height="60dp" />
</LinearLayout>
3.接下来就是编码了,
public class MainActivity extends AppCompatActivity {
private GridView gridView;
private ArrayList< String> numberList=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//拿到gridview的id
gridView = (GridView) findViewById(R.id.faGrid);
//初始化要在item显示的户籍
String myfa[] ={"1","5","10","20","50","100","200","300","400","500"};
//将数组中显示的信息添加到集合中
for (int j = 0; j < myfa.length; j++) {
numberList.add(myfa[j]);
}
//将集合中的数据传入适配器
final SeriesFragmentDataAdapter seriesAdapter = new SeriesFragmentDataAdapter(this,numberList);
gridView.setAdapter(seriesAdapter);
//gridview点击事件进行判断是否变色
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
seriesAdapter.clearSelection(position);
seriesAdapter.notifyDataSetChanged();
}
});
}
public class SeriesFragmentDataAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<String> numberList = new ArrayList<String>();
//这一个是设置默认显示的item下标,我默认显示的是第一个,也可以通过更改下标来改变默认显示的item
private int selectedPosition = 0;
public SeriesFragmentDataAdapter(Context context,
ArrayList<String> numberList) {
inflater = LayoutInflater.from(context);
this.numberList = numberList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return numberList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return numberList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public void clearSelection(int position) {
selectedPosition = position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
//拿到item的xml
convertView = inflater.inflate(R.layout.layout_item, null);
//拿到item中的控件id
holder.textview = (TextView) convertView
.findViewById(R.id.texts);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
if (numberList.get(position).length() > 0) {
holder.textview.setText(numberList.get(position));
}
//设置点击的颜色更改
if (selectedPosition == position) {
holder.textview.setTextColor(Color.parseColor("#ff6501"));
} else {
holder.textview.setTextColor(Color.parseColor("#404040"));
}
return convertView;
}
public class ViewHolder {
public TextView textview;
}
}
}