在getView()时,通过判断选择加载不同的布局。

点击某个item的时候,变为foucus状态,其他的items还原。

下面用两个方法给item设置两个不同的布局。

//foucus状态,显示一个ImageViewprivate View addFocusView(int i) {ImageView iv = new ImageView(mContext);iv.setImageResource(R.drawable.ic_launcher);return iv;}
//normal状态显示一个ImageView和一个TextViewprivate View addNormalView(int i) {LinearLayout layout = new LinearLayout(mContext);layout.setOrientation(LinearLayout.HORIZONTAL);ImageView iv = new ImageView(mContext);iv.setImageResource(R.drawable.ic);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;}

FocusListViewAdapter.java

package sunny.example.ahfourlistviewfocus;import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;import java.util.List;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;}
//foucus状态,显示一个ImageViewprivate View addFocusView(int i) {ImageView iv = new ImageView(mContext);iv.setImageResource(R.drawable.ic_launcher);return iv;}
//normal状态显示一个ImageView和一个TextViewprivate View addNormalView(int i) {LinearLayout layout = new LinearLayout(mContext);layout.setOrientation(LinearLayout.HORIZONTAL);ImageView iv = new ImageView(mContext);iv.setImageResource(R.drawable.ic);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_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ListViewandroid:id="@+id/focus_listView"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>

MainActivity.java

package sunny.example.ahfourlistviewfocus;import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView listView = (ListView) findViewById(R.id.focus_listView);List<String> data = new ArrayList<String>();data.add("I am item 1");data.add("I am item 2");data.add("I am item 3");data.add("I am item 4");data.add("I am item 5");final FocusListViewAdapter adapter = new FocusListViewAdapter(this, data);/* public void setAdapter (ListAdapter adapter) Sets the data behind this ListView.*/listView.setAdapter(adapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {adapter.setCurrentItem(position);////*void android.widget.BaseAdapter.notifyDataSetChanged()
Notifies the attached observers that the underlying data has been changed and any View reflecting the data set should refresh itself.
*/              //刷新布局adapter.notifyDataSetChanged();}});}}

foucus item3的情况

动态改变ListView布局相关推荐

  1. android 动态改变listview的内容

    本文模拟:点击一个按钮,为已有的listview添加一行数据 <?xml version="1.0" encoding="utf-8"?> < ...

  2. 【Android多屏适配】动态改变Listview item高度

    在ListView的Adapter中去直接获取传入View的LayoutParams是会报空指针异常的,唯一的方法是在xml中嵌套布局一层LinearLayout <?xml version=& ...

  3. android asynctask源码分析,Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)...

    本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,noti ...

  4. android动态改变布局,Android 动态添加布局的两种方式

    前言 大多数时候我们布局都是用xml来布局的,但有些时候也是会用到动态布局的,尤其是在一些大项目中,动态布局更是体现的淋漓尽致. 所以今天我们就来学习一些动态加添布局的两种方式,分别是 动态添加xml ...

  5. vue中设置html的fontsize,vue中rem布局使用js动态改变fontsize

    rem布局原理:使用js动态改变html的字体大小+rem的特性,来保证最初的设计图中每个元素的尺寸比例不变,以适用于不同尺寸的设备能够正常显示. (function (doc, win) { var ...

  6. 动态修改ListView文字大小

    动态修改ListView文字大小 写了一个MyAdapter(继承了BaseAdapter)去实现数据和UI的显示.通过滑动SeekBar来改变MyAdapter的getView方法中View的字体大 ...

  7. 动态改变select 宽度

    有一个简单的办法:动态改变宽度         <select   οnblur="this.style.width=30"   οnfοcus="this.sty ...

  8. html卡片布局按钮,Material Design风格动态网格卡片布局UI设计

    这是一款效果非常炫酷的Material Design风格动态网格卡片布局UI设计效果.在该效果中鼠标滑过卡片时会有阴影效果,当浏览器尺寸改变时,卡片大小会随着改变,整个网格布局有动态变化效果. 使用方 ...

  9. Android 动态计算ListView的高度

    目录 一.简介 二.效果图 三.代码实现 一.简介 在Android开发的过程中有的时候我们需要手动计算ListView的高度,比如说,ScrollView中嵌套ListView的时候,我们就需要手动 ...

最新文章

  1. Microbiome:韦中组揭示根际原生动物群落是决定植物健康的关键因素
  2. 苹果史诗级硬件漏洞 iOS 可永久越狱并且无法修复
  3. Perl 教学 Perl5中的引用(指针)
  4. 设置vmware vsphere web client_Arduino+前端高级应用-通过WEB网页控制Arduino开发板上的LED灯...
  5. sdk数值与android版本,Android SdkVersion的区别及获取版本信息方法
  6. SAP Spartacus 中的 checkout(结帐) 设计
  7. java中multiply用法_java中BigDecimal加减乘除基本用法
  8. Iceberg 在基于 Flink 的流式数据入库场景中的应用
  9. 唯品会2017年双11大促技术保障实践,全域提供25万QPS服务能力
  10. java的printwriter_Java PrintWriter错误
  11. 专家视点:杜绝木马的干扰-防范后门的技巧(转)
  12. 宝塔linux面板-安装golang环境,宝塔面板Linux环境-安装Golang:Go语言环境
  13. 如何用ESP8266 向手机App 发送信息
  14. android 空调遥控,安卓版万能空调遥控器
  15. python判断今天周几_如何用python判断今天是星期几
  16. 手把手带你从0开始搭建个人网站,小白可懂的保姆级教程
  17. 疑难杂症篇(十六)--虚拟机出现“The system is running in low-graphics mode“问题的解决方案
  18. 实验三:CART分类决策树python实现(两个测试集)(一)|机器学习
  19. Android 腾讯手机管家 报毒 a.gray.PiggyGoldcoin.a
  20. Rockchip rv1126平台在gstreamer1中添加OpenCv实现视频流负片的效果

热门文章

  1. Linux命令中的$()和${}的区别
  2. 启动weblogic需要账号密码问题
  3. imagettftext php7,mac php7 imagettftext
  4. docker create_Docker动手教程2.2:容器基本操作2
  5. vs 2019 社区版许可证过期_Switch版《最终幻想12:黄道时代》对比PS4版 就没差
  6. java 预处理语句_预处理语句PreparedStatement到底咋用啊
  7. centos linux 内核升级,Centos系统的升级及Linux 内核升级
  8. PHP中文无法查询,php 中htmlentities导致中文无法查询问题
  9. python自动化运维快速入门pdf下载_Python自动化运维快速入门
  10. ubuntu的home目录下,Desktop等目录消失不见