主要记录:1.解决parent.getChildAt()空指针的问题

 int firstVisiblePosition=parent.getFirstVisiblePosition();//获取当前可视列表的第一个View的地址 int i;//i为视图中目标item的地址int item=i-firstVisiblePosition;//例如:firstVisiblePosition==10;i==12;那么item==2,就是说你想要的View是可视列表中的第二个View v=parent.getChildAt(item);//获取到当前目标的View

2.动态改变控件的背景颜色:setBackgroundColor(Color.parseColor());//详细代码请往下看

针对以上,做了一个简单的Demo(附代码):

GridView展示Demo,布局及功能如下:
(如果左边是一列的信息可以用ListView,这里我用了GridView是为了下一个Demo做铺垫)
1)左边为GiridView,主干标题栏
2)右边对应左边标题栏的详细信息,设置了两个TextView进行展示
3)点击左边GridView的item,该item的背景颜色会改变,右边对应更新相关信息。

效果图如下:

1)配置布局
1.首先配置主界面的xml:将主页控件的布局改为水平布置:orientation=“horizontal”

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.suyingxin.myapplication.MainActivity">    <GridView        android:layout_width="100dp"        android:layout_height="wrap_content"        android:id="@+id/grid_vs"        android:numColumns="1"        android:horizontalSpacing="24dp"        android:verticalSpacing="24dp"        android:scrollbars="none"        android:transcriptMode="alwaysScroll"        android:stretchMode="columnWidth">    </GridView>    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:layout_marginLeft="200dp"        android:orientation="vertical">        <TextView            android:id="@+id/tv_title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textSize="16sp"            android:alpha="0.6" />        <TextView            android:id="@+id/tv_text"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textSize="24sp"/>    </LinearLayout>    </LinearLayout>

2.配置GridView的item布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal">    <LinearLayout        android:id="@+id/layout_gv"        android:layout_width="100dp"        android:layout_height="100dp"        android:orientation="vertical"        android:background="@color/myColor">        <TextView            android:id="@+id/tv_name"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:textSize="24sp"            />        <ImageView            android:id="@+id/image_view"            android:layout_marginTop="6dp"            android:layout_gravity="center"            android:layout_width="60dp"            android:layout_height="60dp"            />    </LinearLayout></LinearLayout>

2)配置Bean数据(这个就不附代码了,加上get、set方法就好了)
1.新建一个左边数据的Bean:命名为GridViewBean,两个变量:标题名name和图片的来源 resourceId;

2.新建一个右边数据的Bean:命名为contentBean,两个变量:title和text;

3)MainActivity:主要就是三个步骤 1.加载布局的id 2.初始化数据 3.加载自定义适配器的布局

public class MainActivity extends AppCompatActivity {         GridView girdView;    GridAdapter adapter1;    TextView title;    TextView text;    LinearLayout gv_ll;    List<GridViewBean> gridList=new ArrayList<>();    List<contentBean> listBean=new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        girdView= (GridView) findViewById(R.id.grid_vs);        title= (TextView) findViewById(R.id.tv_title);        text= (TextView) findViewById(R.id.tv_text);        gv_ll= (LinearLayout) findViewById(R.id.layout_gv);        initData();        Log.e("MainActivity=====","girdView"+gridList.size());        Log.e("MainActivity=====","lv_List"+listBean.size());        setLeftAdapter();        girdView.setOnItemClickListener(new AdapterView.OnItemClickListener() {                 @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                     //改变当前点击item的背景颜色                int firstVisiblePosition=parent.getFirstVisiblePosition();//获取当前GridView在屏幕中可见的第一个item                int lastVisiblePosition=parent.getLastVisiblePosition();//获取当前GridView在屏幕中可见的最后一个item                for (int i=firstVisiblePosition;i<lastVisiblePosition+1;i++){                         int item=i-firstVisiblePosition;                    if (item<0||item>parent.getChildCount()){                             Log.d("MainActivity------","SelectionItem---Error");                    }else {                             View v=parent.getChildAt(item);//如果当前的子类不在视图列表内,parent.getChildAt()就会报空指针的错误,所以item要处理一下                        if (i==position){                                 view.findViewById(R.id.layout_gv).setBackgroundColor(Color.parseColor("#3F51B5"));                        }else {                                 v.findViewById(R.id.layout_gv).setBackgroundColor(Color.parseColor("#D1EEEE"));                        }                    }                }                setRightView(position);            }        });    }   //初始化GridView的Adapter    private void setLeftAdapter() {             adapter1=new GridAdapter(MainActivity.this,gridList);        girdView.setAdapter(adapter1);    }        //初始化数据    private void initData() {             //初始化左边GridView数据        for (int i=0;i<10;i++){                 GridViewBean gridView=new GridViewBean("水果"+i,R.drawable.fruit);            gridList.add(gridView);        }        //初始化右边ListView数据        List<String> listTitle=new ArrayList<>();        listTitle.add("苹果");        listTitle.add("香蕉");        listTitle.add("芒果");        listTitle.add("雪梨");        listTitle.add("草莓");        listTitle.add("蓝莓");        listTitle.add("西瓜");        listTitle.add("哈密瓜");        listTitle.add("樱桃");        listTitle.add("橙子");        List<String> listText=new ArrayList<>();        for (int i=0;i<10;i++){                 listText.add(listTitle.get(i)+i);        }        for (int i=0;i<listText.size();i++){                 String title=listTitle.get(i);            String text=listText.get(i);            contentBean listBean1=new contentBean(title,text);            listBean.add(listBean1);        }    }    private void setRightView(int position){             title.setText(listBean.get(position).getTitle());        text.setText(listBean.get(position).getText());    }}

4)自定义适配器

public class GridAdapter extends BaseAdapter {         Context context;    int position;    List<GridViewBean> list;    public GridAdapter(Context context,List<GridViewBean> list ){             super();        this.context=context;        this.list=list;    }    @Override    public int getCount() {             return  list.size();    }    @Override    public Object getItem(int position) {             return list.get(position);    }    @Override    public long getItemId(int position) {             return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {             View view;        ViewHolder viewHolder;        if (convertView==null){                 view= LayoutInflater.from(context).inflate(R.layout.item_gridview_adapter,null);            viewHolder=new ViewHolder();            viewHolder.textView=view.findViewById(R.id.tv_name);            viewHolder.imageView=view.findViewById(R.id.image_view);            view.setTag(viewHolder);        }else {                 view=convertView;            viewHolder= (ViewHolder) view.getTag();        }        viewHolder.textView.setText(list.get(position).getName());        viewHolder.imageView.setImageResource(list.get(position).getResourceId());        return view;    }    class ViewHolder{             TextView textView;        ImageView imageView;    }}

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. android+django交互数据(同时上传图片与文字)
  3. Android(安卓)Layout布局属性
  4. 【android】数据库升级完整解决方案
  5. android mediaPlayer error (-38,0)
  6. 【转】高通平台android 环境配置编译及开发经验总结
  7. Realm for Android(安卓)简单使用
  8. Eclipse 默认打开Android(安卓)xml 布局视图的问题
  9. 4.0.x Launcher启动过程

随机推荐

  1. Ubuntu 10.04编译Android(安卓)2.2 源代
  2. httpclient测试代码
  3. Glide 下载多张图片
  4. Android文件操作放到listview中
  5. 83 Android(安卓)Handler ProgressBar 进
  6. Android-FilePicker 选择照片
  7. Android(安卓)使用 keytool 查看签名方法
  8. Android(安卓)浏览器中启动自定义应用
  9. DrawLayout几个注意点
  10. Android(安卓)GridView