精华内容
下载资源
问答
  • 2021-05-05 03:16:39

    update表中index索引列对原索引条目做什么操作?

    --将原索引条目删除,然后再插入新值条目。

    实验验证:

    方法:通过修改index列值后,查看index碎片的变化

    --建立table测试

    CREATE TABLE MES1.T_OBJECT

    AS

    SELECT * FROM DBA_OBJECTS

    WHERE ROWNUM<=20000;

    --当前20000笔数据

    SELECT COUNT(1) FROM MES1.T_OBJECT;

    20000

    --建立index

    CREATE INDEX MES1.IDX_OWNER ON  MES1.T_OBJECT(OWNER);

    --当前index使用大小

    SELECT SEGMENT_NAME,BYTES,BLOCKS FROM DBA_SEGMENTS

    WHERE SEGMENT_NAME='IDX_OWNER'

    SEGMENT_NAME    BYTES    BLOCKS

    IDX_OWNER    458752    56

    update index列前索引的使用状况

    --使用ANALYZE INDEX ... VALIDATE STRUCTURE可分析index具体使用情况和是否有坏块,

    注意执行不使用online话会产生锁,阻塞DML

    analyze index  MES1.IDX_OWNER validate structure;

    --分析结果可通过index_stats查看

    select NAME,BLOCKS,DEL_LF_ROWS,LF_ROWS,DEL_LF_ROWS/LF_ROWS from index_stats;

    NAME    BLOCKS    DEL_LF_ROWS    LF_ROWS    DEL_LF_ROWS/LF_ROWS

    IDX_OWNER    56    0    20000    0

    --BLOCKS: Blocks allocated to the segment,index segment使用56个block

    --DEL_LF_ROWS: Number of deleted leaf rows in the index,索引中被删除的叶子行数,当前没有删除所以是0

    --LF_ROWS: Number of leaf rows,叶子总行数,为建表时的20000

    --DEL_LF_ROWS/LF_ROWS:index中被删除行占总行数的百分比,

    即碎片数(如果用del_lf_rows_len/lf_rows_len更准确),这里没有删除行所以为0

    update index列

    --修改10000笔索引列值

    UPDATE  MES1.T_OBJECT SET OWNER='TESTUIDX'

    WHERE ROWNUM<=10000;

    commit;

    update index列后索引的使用状况

    --再次分析index使用状况

    analyze index  MES1.IDX_OWNER validate structure;

    select NAME,BLOCKS,DEL_LF_ROWS,LF_ROWS,DEL_LF_ROWS/LF_ROWS from index_stats;

    select * from index_stats

    NAME    BLOCKS    DEL_LF_ROWS    LF_ROWS    DEL_LF_ROWS/LF_ROWS

    IDX_OWNER    112    10000    30000    0.333333333333333

    --BLOCKS: 增加到了112

    --DEL_LF_ROWS: update后索引中被删除的叶子行数变为10000,说明update会将原来索引条目行删除

    --LF_ROWS: 叶子总行数变为30000,

    --进一步证实是删除了10000行,但index中之前空间并没有释放,再加上update后新插入的10000,也就是30000了

    --DEL_LF_ROWS/LF_ROWS:因为update被删除的行产生的碎片为10000/30000,正好为0.333333333333333

    以上是针对update时的情况,delete时实际是一样机制,这里不做验证。

    结论:

    在update更新index索引列操作时是

    将原索引条目删除,再插入新值条目。

    所以在有频繁对table索引列update和delete

    table操作的,可以使用

    ANALYZE INDEX ... VALIDATE STRUCTURE定期分析index,

    并执行alter index...

    rebuild,shrink,coalesce之类整理索引碎片

    更多相关内容
  • 只需上传或指向您要清除的数据,然后通过点击界面就可以开始合并列条目。 无需编码-尽管它确实为想要的ETL管道吐出了可重现的脚本! 我们的第一个版本侧重于实体合并任务(在数据集之内和之间),但是我们计划在...
  • LaTeX 多层列举 条目 编号

    千次阅读 2020-09-09 16:46:29
    Latex 多层条目 编号 只需要使用嵌套的方法即可 LaTeX共有3种常用的列举方式 itemize和enumerate还有description \begin{itemize} \item 开发组 \begin{itemize} \item 数据层 -----前期2位同学,后期1位同学 \\主要...

    Latex 多层条目 编号

    只需要使用嵌套的方法即可

    LaTeX共有3种常用的列举方式 itemize和enumerate还有description

    \begin{itemize}
    \item 开发组
    \begin{itemize}
    \item 数据层   -----前期2位同学,后期1位同学
    \\主要负责数据的采集、抽取以及入库等(需要了解neo4j)。
    \item 前端     ----- 1位同学
    \\主要负责功能界面的可视化(需要了解node.js)。
    \item 后端     ----- 1位同学
    \\主要负责业务逻辑。
    \end{itemize}
    \item 研究组
    \end{itemize}
    

    多层列举效果

    展开全文
  • 中的条目转换为链接的 ko-grid 扩展。
  • 自动切换IE代理设置: 简单使用IE自动配置脚本
  • Latex-条目、编号、描述

    万次阅读 多人点赞 2017-10-16 22:22:01
    itemize(意为分条目): \begin{itemize} \item[*] a \item[*] b \end{itemize} 这样出来的形式为 * a * bitem的方括号里的内容是为定制前面的符号,可以不要(连同括号),那么前面的符号就是默认的黑点,也可以...

    LaTeX中三种列举的形式:itemize和enumerate还有description。

    itemize(意为分条目):
    \begin{itemize}
    \item[*] a
    \item[*] b
    \end{itemize}
    这样出来的形式为
      * a
      * b

    item的方括号里的内容是为定制前面的符号,可以不要(连同括号),那么前面的符号就是默认的黑点,也可以换为其他的符号,如-,+,等

    2)enumerate(意为编号):
    \begin{enumerate}[1)]
    \item a
    \item b
    \end{enumerate}
    这样出来的形式为:
      1a
      2) b

    方括号里的内容是定制前面的编号的形式,可以不加,默认就是简单的数字,也可以换成[step 1],[(i)]等,LaTeX可以自动识别。但是要注意,使用了方括号,必须在前面加\usepackage{enumerate}.

    3)description(意为描述):
    \begin{description}
    \item[item a] a
    \item[item b] b
    \end{description}
    出来的形式为:
    item a a
    item b b

    方括号的词会作为一个描述出现在item的前面。

    分条列写

    代码:

    as follow:
    \begin{itemize}
      \item [1)] 
      A hierarchical control structure is proposed due to the cascade property between translational and rotational system.       
      \item [2)]
      Compared with the conventional asymptotic stability controller, the proposed finite - time output feedback controllers can provided faster convergence rates, better disturbance rejection property for trajectory tracking control of the quadrotor UAV in the presence of external disturbances and parametric uncertainties. 
      \item [3)]
      Based on finite - time convergent observer, in stead of sensors, such that efficiently decreases the cost and the complexity of the quadrotor UAV system.
    \end{itemize}

    编译效果:

    这里写图片描述

     每个公式分别编号(numcases)+对齐

    代码:

    \begin{subequations}
    \begin{numcases}{\sum{1}:}\label{sub1}
    \dot{\tilde{\bm{p}}}=\tilde{\bm{v}} \label{1wo1}\\
    \dot{\tilde{\bm{v}}}=g\bm{e_3}-\frac{1}{m}\mathcal{T}R_d\bm{e_3}+\bm{d}'_1-\ddot{\bm{p}}_d\label{1wo2}
    \end{numcases}
    \end{subequations}
    2. 
    \begin{subequations}
    \begin{numcases}{\sum{2}:}
    \begin{aligned}
    \dot{\tilde{\bm{q}}}=&\frac{1}{2}(\tilde{q}_0I_3+\tilde{\bm{q}}^{\times}){\tilde{\omega}}\\
    \dot{\tilde{\bm{\omega}}}=&J_0^{-1}(-(\tilde{\bm{\omega}}+\tilde{R}\bm{\omega}_d)^{\times}J_0(\tilde{\bm{\omega}}+\tilde{R}\bm{\omega}_d)+\bm{\tau})\\
    &+\bm{d}'_2+\tilde{\bm{\omega}}^{\times}\tilde{R}\bm{\omega}_d-\tilde{R}\dot{\bm{\omega}}_d
    \end{aligned}
    \end{numcases}
    \end{subequations}

    这里写图片描述

    \begin{numcases}{\sum{2}:}
    \begin{aligned}

    分条列写和对齐环境好像不能同时使用,举例如下:
    代码:

    \begin{subequations}
    \begin{numcases}{\sum{2}:}
    \begin{aligned}
    \dot{\tilde{\bm{q}}}=&\frac{1}{2}(\tilde{q}_0I_3+\tilde{\bm{q}}^{\times}){\tilde{\omega}}  \label{2att1}\\
    \dot{\tilde{\bm{\omega}}}=&J_0^{-1}(-(\tilde{\bm{\omega}}+\tilde{R}\bm{\omega}_d)^{\times}J_0(\tilde{\bm{\omega}}+\tilde{R}\bm{\omega}_d)+\bm{\tau}) \notag \\
    &+\bm{d}'_2+\tilde{\bm{\omega}}^{\times}\tilde{R}\bm{\omega}_d-\tilde{R}\dot{\bm{\omega}}_d  \label{2att2}
    \end{aligned}
    \end{numcases}
    \end{subequations}

    这里写图片描述

    虽然每个分公式都添加了label,但是编译后的每个公式并没有相应的效果; 如果不使用对齐环境,则代码+编译效果为
    代码:

    \begin{subequations}
    \begin{numcases}{\sum{2}:}
    \dot{\tilde{\bm{q}}}=\frac{1}{2}(\tilde{q}_0I_3+\tilde{\bm{q}}^{\times}){\tilde{\omega}}  \label{2att1}\\
    \dot{\tilde{\bm{\omega}}}=J_0^{-1}(-(\tilde{\bm{\omega}}+\tilde{R}\bm{\omega}_d)^{\times}J_0(\tilde{\bm{\omega}}+\tilde{R}\bm{\omega}_d)+\bm{\tau}) \notag \\
    +\bm{d}'_2+\tilde{\bm{\omega}}^{\times}\tilde{R}\bm{\omega}_d-\tilde{R}\dot{\bm{\omega}}_d  \label{2att2}
    \end{numcases}
    \end{subequations}

    这里写图片描述

    大括号下对每个公式自定义编号

    \usepackage{cases}
    \begin{numcases}{f(x)= }
      f_1(x) = a + b -3c \label{EQ_1} \\
      f_2(x) = 2a + 5b +c \notag \\
      f_3(x) = 4a + 2b -c \label{EQ_3}
    \end{numcases} 

    这里写图片描述

    注: 上面代码中

    • \notag 指令 会取消对应公式的编号。
    • \begin{numcases} 之后 有一个大括号 {} , 上面的例子中是 {f(x)= } , 不要漏掉。另外,不要写成 { $f(x)=$ } (错误写法), 因为 numcases 已经将此括号中的内容作数学公式处理。
    • 最后一行公式 “\label{EQ_3}” 之后,不应再加 “\”。 否则,会多出一个空的公式和编号。
    • 用 numcases 环境,要记得加入宏包:\usepackage{cases} , 注意宏包的名字是 cases, 不是 numcases.
    展开全文
  • RecyclerView优雅的实现多条目布局
  • RecyclerView上下拖动条目改变条目顺序;侧滑条目删除。
  • 主要介绍了Android ListView 条目多样式展示的相关资料,需要的朋友可以参考下
  • 即时贴列表是Gravity Forms插件,可让您从前端出和编辑条目。 描述 即时贴 便利贴是WordPress插件的附加组件,可让您从前端出和编辑条目。 您可以在前端显示一个列表,用户可以在其中查看,删除和编辑已提交的...
  • CS博客 CrazedSanity.com上使用的Blogger系统的主页...
  • 每个条目包含多个要粘贴到 Excel 中的子条目。 这是使用 Jquery 和 Javascript 的脚本技术,您可以在其中自动执行此手动过程。 你如何在别人的网站上执行脚本也不是很有趣。 对此的答案是 Firebug。 只需将您的...
  • 在React.js中实现了用于出已保存条目的UI。 还允许评分,添加书签,过滤,搜索。 (UI演示已部署到Heroku免费 ) 的Python:3.7 的Django:2.2 React.js 芹菜 弹性搜索 PostgreSQL 介绍性文件 目标 定期检查...
  • // 当前的条目是普通recyclerView的条目     public   static   final   int  NORMAL_RECYCLER_VIEW_ITEM =  1 ;      @Override     protected   void  onCreate(Bundle savedInstanceState) { ...

    用RecycleView来实现布局形式,默认只能指定一种布局格式,但是实际中我们的布局经常会用到多种类型的布局方式。如何实现呢?

    今天来说下常用的2钟方式。

    第一种:

    通过自定义addHeadView方法来添加头布局

    RecycleViewWithHead.Java

    1. import android.app.Activity;  
    2. import android.os.Bundle;  
    3. import android.support.v7.widget.GridLayoutManager;  
    4. import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;  
    5. import android.support.v7.widget.RecyclerView;  
    6. import android.view.View;  
    7.   
    8. public class RecycleViewWithHead extends Activity {  
    9.   
    10.     private RecyclerView rcv;  
    11.     // 当前的条目是recyclerView的头布局  
    12.     public static final int HEADER_RECYCLER_VIEW_ITEM = 0;  
    13.     // 当前的条目是普通recyclerView的条目  
    14.     public static final int NORMAL_RECYCLER_VIEW_ITEM = 1;  
    15.   
    16.     @Override  
    17.     protected void onCreate(Bundle savedInstanceState) {  
    18.         // TODO Auto-generated method stub  
    19.         super.onCreate(savedInstanceState);  
    20.         setContentView(R.layout.activity_recycle);  
    21.         rcv = (RecyclerView) findViewById(R.id.rcv);  
    22.         // 设置布局管理  
    23.         GridLayoutManager manager = new GridLayoutManager(this2);  
    24.         // 设置布局管理一条数据占用几行,如果是头布局则头布局自己占用一行  
    25.         manager.setSpanSizeLookup(new SpanSizeLookup() {  
    26.             @Override  
    27.             public int getSpanSize(int postion) {  
    28.                 if (postion == 0) {  
    29.                     return 2;  
    30.                 } else {  
    31.                     return 1;  
    32.                 }  
    33.             }  
    34.         });  
    35.         rcv.setLayoutManager(manager);  
    36.         MyRecycleAdapter adapter = new MyRecycleAdapter(  
    37.                 RecycleViewWithHead.this20);  
    38.         View view = View.inflate(this, R.layout.head, null);  
    39.         adapter.addHeadView(view);  
    40.         rcv.setAdapter(adapter);  
    41.     }  
    42. }  
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v7.widget.GridLayoutManager;
    import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    
    public class RecycleViewWithHead extends Activity {
    
        private RecyclerView rcv;
        // 当前的条目是recyclerView的头布局
        public static final int HEADER_RECYCLER_VIEW_ITEM = 0;
        // 当前的条目是普通recyclerView的条目
        public static final int NORMAL_RECYCLER_VIEW_ITEM = 1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_recycle);
            rcv = (RecyclerView) findViewById(R.id.rcv);
            // 设置布局管理
            GridLayoutManager manager = new GridLayoutManager(this, 2);
            // 设置布局管理一条数据占用几行,如果是头布局则头布局自己占用一行
            manager.setSpanSizeLookup(new SpanSizeLookup() {
                @Override
                public int getSpanSize(int postion) {
                    if (postion == 0) {
                        return 2;
                    } else {
                        return 1;
                    }
                }
            });
            rcv.setLayoutManager(manager);
            MyRecycleAdapter adapter = new MyRecycleAdapter(
                    RecycleViewWithHead.this, 20);
            View view = View.inflate(this, R.layout.head, null);
            adapter.addHeadView(view);
            rcv.setAdapter(adapter);
        }
    }
    


    布局文件activity_recycle.xml

    1. <RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
    2.     xmlns:tools=“http://schemas.android.com/tools”  
    3.     android:layout_width=“match_parent”  
    4.     android:layout_height=“match_parent”>  
    5.   
    6.   
    7.     <android.support.v7.widget.RecyclerView  
    8.         android:id=“@+id/rcv”  
    9.         android:layout_width=“match_parent”  
    10.         android:layout_height=“wrap_content” />  
    11.   
    12.   
    13. </RelativeLayout>  
    <RelativeLayout 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.support.v7.widget.RecyclerView
            android:id="@+id/rcv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    
    </RelativeLayout>


    头布局文件head.xml

    1. <?xml version=“1.0” encoding=“utf-8”?>  
    2. <RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
    3.     android:layout_width=“match_parent”  
    4.     android:layout_height=“match_parent” >  
    5.   
    6.     <ImageView  
    7.         android:id=“@+id/iv_head”  
    8.         android:layout_width=“80dp”  
    9.         android:layout_height=“80dp”  
    10.         android:layout_margin=“10dp”  
    11.         android:src=“@drawable/head” />  
    12.   
    13.     <TextView  
    14.         android:id=“@+id/tv_head”  
    15.         android:layout_width=“wrap_content”  
    16.         android:layout_height=“wrap_content”  
    17.         android:layout_alignTop=“@+id/iv_head”  
    18.         android:layout_toRightOf=“@+id/iv_head”  
    19.         android:text=“这是一张熊猫的图片” />  
    20.   
    21.     <ImageView  
    22.         android:id=“@+id/iv_head_bottom”  
    23.         android:layout_width=“wrap_content”  
    24.         android:layout_height=“wrap_content”  
    25.         android:layout_alignBottom=“@+id/iv_head”  
    26.         android:layout_toRightOf=“@+id/iv_head”  
    27.         android:src=“@drawable/type” />  
    28.   
    29. </RelativeLayout>  
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <ImageView
            android:id="@+id/iv_head"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_margin="10dp"
            android:src="@drawable/head" />
    
        <TextView
            android:id="@+id/tv_head"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/iv_head"
            android:layout_toRightOf="@+id/iv_head"
            android:text="这是一张熊猫的图片" />
    
        <ImageView
            android:id="@+id/iv_head_bottom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/iv_head"
            android:layout_toRightOf="@+id/iv_head"
            android:src="@drawable/type" />
    
    </RelativeLayout>



    适配器MyRecycleAdapter.java

    1. import android.content.Context;  
    2. import android.support.v7.widget.RecyclerView;  
    3. import android.support.v7.widget.RecyclerView.ViewHolder;  
    4. import android.view.LayoutInflater;  
    5. import android.view.View;  
    6. import android.view.View.OnClickListener;  
    7. import android.view.ViewGroup;  
    8. import android.widget.Toast;  
    9.   
    10. public class MyRecycleAdapter extends  
    11.         RecyclerView.Adapter<MyRecycleAdapterHolder> {  
    12.   
    13.     private View headView;  
    14.     private Context mContext;  
    15.     private int count;  
    16.   
    17.     MyRecycleAdapter(Context mContext, int count) {  
    18.         this.count = count;  
    19.         this.mContext = mContext;  
    20.     }  
    21.   
    22.     /** 
    23.      * 设置数据源总的条目 
    24.      */  
    25.     @Override  
    26.     public int getItemCount() {  
    27.         //返回条目数加头布局个数  
    28.         return count + 1;  
    29.     }  
    30.   
    31.     @Override  
    32.     public void onBindViewHolder(MyRecycleAdapterHolder holder,  
    33.             final int position) {  
    34.         int itemViewType = getItemViewType(position);  
    35.         // 头部  
    36.         if (itemViewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {  
    37.             return;  
    38.         } else if (itemViewType == RecycleViewWithHead.NORMAL_RECYCLER_VIEW_ITEM) {//普通条目  
    39.             holder.iv_item_icon.setOnClickListener(new OnClickListener() {  
    40.                 @Override  
    41.                 public void onClick(View v) {  
    42.                     Toast.makeText(mContext, (position - 1) + “”0).show();  
    43.                 }  
    44.             });  
    45.         }  
    46.   
    47.     }  
    48.   
    49.     @Override  
    50.     public MyRecycleAdapterHolder onCreateViewHolder(ViewGroup parent,  
    51.             int viewType) {  
    52.         View root = null;  
    53.         if (viewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {  
    54.             root = headView;  
    55.         } else {  
    56.             root = LayoutInflater.from(mContext).inflate(R.layout.item, parent,  
    57.                     false);  
    58.         }  
    59.         return new MyRecycleAdapterHolder(root, viewType);  
    60.     }  
    61.   
    62.     /** 
    63.      * 添加自定义头部 
    64.      */  
    65.     public void addHeadView(View view) {  
    66.         this.headView = view;  
    67.     }  
    68.   
    69.     @Override  
    70.     public int getItemViewType(int position) {  
    71.   
    72.         if (position == 0) {  
    73.             return RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM;  
    74.         } else {  
    75.             return RecycleViewWithHead.NORMAL_RECYCLER_VIEW_ITEM;  
    76.         }  
    77.     }  
    78. }  
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.RecyclerView.ViewHolder;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    public class MyRecycleAdapter extends
            RecyclerView.Adapter<MyRecycleAdapterHolder> {
    
        private View headView;
        private Context mContext;
        private int count;
    
        MyRecycleAdapter(Context mContext, int count) {
            this.count = count;
            this.mContext = mContext;
        }
    
        /**
         * 设置数据源总的条目
         */
        @Override
        public int getItemCount() {
            //返回条目数加头布局个数
            return count + 1;
        }
    
        @Override
        public void onBindViewHolder(MyRecycleAdapterHolder holder,
                final int position) {
            int itemViewType = getItemViewType(position);
            // 头部
            if (itemViewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
                return;
            } else if (itemViewType == RecycleViewWithHead.NORMAL_RECYCLER_VIEW_ITEM) {//普通条目
                holder.iv_item_icon.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(mContext, (position - 1) + "", 0).show();
                    }
                });
            }
    
        }
    
        @Override
        public MyRecycleAdapterHolder onCreateViewHolder(ViewGroup parent,
                int viewType) {
            View root = null;
            if (viewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
                root = headView;
            } else {
                root = LayoutInflater.from(mContext).inflate(R.layout.item, parent,
                        false);
            }
            return new MyRecycleAdapterHolder(root, viewType);
        }
    
        /**
         * 添加自定义头部
         */
        public void addHeadView(View view) {
            this.headView = view;
        }
    
        @Override
        public int getItemViewType(int position) {
    
            if (position == 0) {
                return RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM;
            } else {
                return RecycleViewWithHead.NORMAL_RECYCLER_VIEW_ITEM;
            }
        }
    }
    


    普通条目的布局文件item.xml

    1. <?xml version=“1.0” encoding=“utf-8”?>  
    2. <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
    3.     android:id=“@+id/ll_list”  
    4.     android:layout_width=“wrap_content”  
    5.     android:layout_height=“wrap_content”  
    6.     android:layout_marginLeft=“2dp”  
    7.     android:layout_marginRight=“2dp”  
    8.     android:layout_marginTop=“5dp”  
    9.     android:orientation=“vertical” >  
    10.   
    11.     <ImageView  
    12.         android:id=“@+id/iv_item_icon”  
    13.         android:layout_width=“wrap_content”  
    14.         android:layout_height=“wrap_content”  
    15.         android:src=“@drawable/item” />  
    16.   
    17.     <TextView  
    18.         android:id=“@+id/tv_item”  
    19.         android:layout_width=“wrap_content”  
    20.         android:layout_height=“wrap_content”  
    21.         android:layout_gravity=“center_horizontal”  
    22.         android:layout_marginTop=“5dp”  
    23.         android:text=“这是一只熊猫” />  
    24.   
    25. </LinearLayout>  
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ll_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:layout_marginTop="5dp"
        android:orientation="vertical" >
    
        <ImageView
            android:id="@+id/iv_item_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/item" />
    
        <TextView
            android:id="@+id/tv_item"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="5dp"
            android:text="这是一只熊猫" />
    
    </LinearLayout>



    普通条目的ViewHolder

    1. import android.support.v7.widget.RecyclerView;  
    2. import android.view.View;  
    3. import android.widget.ImageView;  
    4. import android.widget.TextView;  
    5.   
    6. public class MyRecycleAdapterHolder extends RecyclerView.ViewHolder{  
    7.       
    8.     public ImageView iv_item_icon;  
    9.     public TextView tv_item;  
    10.     public MyRecycleAdapterHolder(View itemView) {  
    11.         super(itemView);  
    12.     }  
    13.     public MyRecycleAdapterHolder(View itemView,int viewType) {  
    14.         super(itemView);  
    15.         initView(itemView,viewType);  
    16.     }  
    17.     private void initView(View itemView, int viewType) {  
    18.         iv_item_icon = (ImageView) itemView.findViewById(R.id.iv_item_icon);  
    19.         tv_item = (TextView) itemView.findViewById(R.id.tv_item);  
    20.     }  
    21.   
    22. }  
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MyRecycleAdapterHolder extends RecyclerView.ViewHolder{
    
        public ImageView iv_item_icon;
        public TextView tv_item;
        public MyRecycleAdapterHolder(View itemView) {
            super(itemView);
        }
        public MyRecycleAdapterHolder(View itemView,int viewType) {
            super(itemView);
            initView(itemView,viewType);
        }
        private void initView(View itemView, int viewType) {
            iv_item_icon = (ImageView) itemView.findViewById(R.id.iv_item_icon);
            tv_item = (TextView) itemView.findViewById(R.id.tv_item);
        }
    
    }
    

    效果图:




    还有一种情况类似于淘宝的商品展示我们可以切换每行显示的数量,其实也很简单

    先看下要实现的效果:


    我先说下大致的实现思路:

    1.给adapter设置一个当前显示多行还是单行的标记。

    2.每次切换视图时重置标记,并重置RecycleView的LayoutManager。

    3.调用adapter.notifyItemRangeChanged(2, adapter.getItemCount());(第一个参数是动画开始的位置索引)

    好了再来看下RecycleViewWithHead.java

    1. import com.example.myrecycleviewdemo.adapter.MyRecycleAdapter;  
    2. import android.app.Activity;  
    3. import android.os.Bundle;  
    4. import android.support.v7.widget.GridLayoutManager;  
    5. import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;  
    6. import android.support.v7.widget.RecyclerView;  
    7. import android.view.View;  
    8. import android.view.View.OnClickListener;  
    9. import android.widget.ImageView;  
    10.   
    11. public class RecycleViewWithHead extends Activity implements OnClickListener {  
    12.   
    13.     private RecyclerView rcv;  
    14.     // 当前的条目是recyclerView的头布局  
    15.     public static final int HEADER_RECYCLER_VIEW_ITEM = 0;  
    16.     // 当前的条目是普通recyclerView的条目  
    17.     public static final int NORMAL_RECYCLER_VIEW_ITEM = 1;  
    18.     // 一行显示一个  
    19.     public static final int RECYCLER_VIEW_ITEM_SINGLE = 3;  
    20.     // 一行显示两个  
    21.     public static final int RECYCLER_VIEW_ITEM_DOUBLE = 4;  
    22.     private ImageView iv_switch;// 视图转换  
    23.     private MyRecycleAdapter adapter;  
    24.     private GridLayoutManager manager;  
    25.   
    26.     @Override  
    27.     protected void onCreate(Bundle savedInstanceState) {  
    28.         // TODO Auto-generated method stub  
    29.         super.onCreate(savedInstanceState);  
    30.         setContentView(R.layout.activity_recycle);  
    31.         rcv = (RecyclerView) findViewById(R.id.rcv);  
    32.         iv_switch = (ImageView) findViewById(R.id.iv_switch);  
    33.         iv_switch.setOnClickListener(this);  
    34.         manager = new GridLayoutManager(this2);  
    35.         // 设置布局管理一条数据占用几行,如果是头布局则头布局自己占用一行  
    36.         manager.setSpanSizeLookup(new SpanSizeLookup() {  
    37.             @Override  
    38.             public int getSpanSize(int postion) {  
    39.                 if (postion == 0) {  
    40.                     return 2;  
    41.                 } else {  
    42.                     return 1;  
    43.                 }  
    44.             }  
    45.         });  
    46.         rcv.setLayoutManager(manager);  
    47.         adapter = new MyRecycleAdapter(RecycleViewWithHead.this20);  
    48.         View view = View.inflate(this, R.layout.head, null);  
    49.         // 设置当前ViewType  
    50.         adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE);  
    51.         adapter.addHeadView(view);  
    52.         rcv.setAdapter(adapter);  
    53.     }  
    54.   
    55.     @Override  
    56.     public void onClick(View v) {  
    57.         switch (v.getId()) {  
    58.         case R.id.iv_switch:  
    59.             changeRecycleViewList();  
    60.             break;  
    61.   
    62.         default:  
    63.             break;  
    64.         }  
    65.   
    66.     }  
    67.   
    68.     /** 
    69.      * 改变RecycleView的显示列数 
    70.      */  
    71.     private void changeRecycleViewList() {  
    72.         if (adapter != null) {  
    73.             int spanSize = adapter.getSpanSize();  
    74.             // 当前一行显示一列  
    75.             if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {  
    76.                 manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {  
    77.                     @Override  
    78.                     public int getSpanSize(int position) {  
    79.                         if (adapter.getItemViewType(position) == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {  
    80.                             return 2;  
    81.                         } else {  
    82.                             return 1;  
    83.   
    84.                         }  
    85.                     }  
    86.                 });  
    87.                 adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE);  
    88.             }  
    89.             // 当前一行显示两列  
    90.             else if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE) {  
    91.                 manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {  
    92.                     @Override  
    93.                     public int getSpanSize(int position) {  
    94.                         if (adapter.getItemViewType(position) == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {  
    95.                             return 2;  
    96.                         } else {  
    97.                             return 2;  
    98.                         }  
    99.                     }  
    100.                 });  
    101.                 adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE);  
    102.             }  
    103.             // 第一个参数是动画开始的位置索引  
    104.             adapter.notifyItemRangeChanged(2, adapter.getItemCount());  
    105.         }  
    106.     }  
    107. }  
    import com.example.myrecycleviewdemo.adapter.MyRecycleAdapter;
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v7.widget.GridLayoutManager;
    import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageView;
    
    public class RecycleViewWithHead extends Activity implements OnClickListener {
    
        private RecyclerView rcv;
        // 当前的条目是recyclerView的头布局
        public static final int HEADER_RECYCLER_VIEW_ITEM = 0;
        // 当前的条目是普通recyclerView的条目
        public static final int NORMAL_RECYCLER_VIEW_ITEM = 1;
        // 一行显示一个
        public static final int RECYCLER_VIEW_ITEM_SINGLE = 3;
        // 一行显示两个
        public static final int RECYCLER_VIEW_ITEM_DOUBLE = 4;
        private ImageView iv_switch;// 视图转换
        private MyRecycleAdapter adapter;
        private GridLayoutManager manager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_recycle);
            rcv = (RecyclerView) findViewById(R.id.rcv);
            iv_switch = (ImageView) findViewById(R.id.iv_switch);
            iv_switch.setOnClickListener(this);
            manager = new GridLayoutManager(this, 2);
            // 设置布局管理一条数据占用几行,如果是头布局则头布局自己占用一行
            manager.setSpanSizeLookup(new SpanSizeLookup() {
                @Override
                public int getSpanSize(int postion) {
                    if (postion == 0) {
                        return 2;
                    } else {
                        return 1;
                    }
                }
            });
            rcv.setLayoutManager(manager);
            adapter = new MyRecycleAdapter(RecycleViewWithHead.this, 20);
            View view = View.inflate(this, R.layout.head, null);
            // 设置当前ViewType
            adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE);
            adapter.addHeadView(view);
            rcv.setAdapter(adapter);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.iv_switch:
                changeRecycleViewList();
                break;
    
            default:
                break;
            }
    
        }
    
        /**
         * 改变RecycleView的显示列数
         */
        private void changeRecycleViewList() {
            if (adapter != null) {
                int spanSize = adapter.getSpanSize();
                // 当前一行显示一列
                if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {
                    manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                        @Override
                        public int getSpanSize(int position) {
                            if (adapter.getItemViewType(position) == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
                                return 2;
                            } else {
                                return 1;
    
                            }
                        }
                    });
                    adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE);
                }
                // 当前一行显示两列
                else if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE) {
                    manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                        @Override
                        public int getSpanSize(int position) {
                            if (adapter.getItemViewType(position) == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
                                return 2;
                            } else {
                                return 2;
                            }
                        }
                    });
                    adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE);
                }
                // 第一个参数是动画开始的位置索引
                adapter.notifyItemRangeChanged(2, adapter.getItemCount());
            }
        }
    }


    布局文件activity_recycle.xml

    1. <RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
    2.     xmlns:tools=“http://schemas.android.com/tools”  
    3.     android:layout_width=“match_parent”  
    4.     android:layout_height=“match_parent”>  
    5.   
    6.     <android.support.v7.widget.RecyclerView  
    7.         android:id=“@+id/rcv”  
    8.         android:layout_width=“match_parent”  
    9.         android:layout_height=“wrap_content” />  
    10.       
    11.     <ImageView   
    12.         android:id=“@+id/iv_switch”  
    13.         android:layout_width=“wrap_content”  
    14.         android:layout_height=“wrap_content”  
    15.         android:layout_alignParentTop=“true”  
    16.         android:layout_alignParentRight=“true”  
    17.         android:layout_margin=“20dp”  
    18.         android:src=“@drawable/more”  
    19.         />  
    20.   
    21. </RelativeLayout>  
    <RelativeLayout 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.support.v7.widget.RecyclerView
            android:id="@+id/rcv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <ImageView 
            android:id="@+id/iv_switch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:layout_margin="20dp"
            android:src="@drawable/more"
            />
    
    </RelativeLayout>


    适配器MyRecycleAdapter.java

    1. import com.example.myrecycleviewdemo.R;  
    2. import com.example.myrecycleviewdemo.RecycleViewWithHead;  
    3. import com.example.myrecycleviewdemo.R.layout;  
    4. import android.content.Context;  
    5. import android.support.v7.widget.RecyclerView;  
    6. import android.support.v7.widget.RecyclerView.ViewHolder;  
    7. import android.view.LayoutInflater;  
    8. import android.view.View;  
    9. import android.view.View.OnClickListener;  
    10. import android.view.ViewGroup;  
    11. import android.widget.Toast;  
    12.   
    13. public class MyRecycleAdapter extends  
    14.         RecyclerView.Adapter<MyRecycleAdapterHolder> {  
    15.   
    16.     public View headView;  
    17.     public Context mContext;  
    18.     public int count;  
    19.     private int spanSize;// 当前每行显示几列  
    20.   
    21.     public MyRecycleAdapter(Context mContext, int count) {  
    22.         this.count = count;  
    23.         this.mContext = mContext;  
    24.     }  
    25.   
    26.     /** 
    27.      * 设置数据源总的条目 
    28.      */  
    29.     @Override  
    30.     public int getItemCount() {  
    31.         // 返回条目数加头布局个数  
    32.         return count + 1;  
    33.     }  
    34.   
    35.     @Override  
    36.     public void onBindViewHolder(MyRecycleAdapterHolder holder,  
    37.             final int position) {  
    38.         int itemViewType = getItemViewType(position);  
    39.         // 头部  
    40.         if (itemViewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {  
    41.             return;  
    42.         } else {// 普通条目  
    43.             if (itemViewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE) {// 一行两列视图  
    44.                 holder.iv_item_icon.setOnClickListener(new OnClickListener() {  
    45.                     @Override  
    46.                     public void onClick(View v) {  
    47.                         Toast.makeText(mContext, ”2列,” + (position - 1) + “”0)  
    48.                                 .show();  
    49.                     }  
    50.                 });  
    51.             } else if (itemViewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {// 一行一列视图  
    52.                 holder.iv_item_icon_single.setOnClickListener(new OnClickListener() {  
    53.                     @Override  
    54.                     public void onClick(View v) {  
    55.                         Toast.makeText(mContext,”单列,” + (position - 1) + “”0).show();  
    56.                     }  
    57.                 });  
    58.             }  
    59.         }  
    60.     }  
    61.   
    62.     @Override  
    63.     public MyRecycleAdapterHolder onCreateViewHolder(ViewGroup parent,  
    64.             int viewType) {  
    65.         View root = null;  
    66.         // 头部  
    67.         if (viewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {  
    68.             root = headView;  
    69.         } else {// 普通条目  
    70.             /** 一行显示一条 */  
    71.             if (viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {  
    72.                 root = LayoutInflater.from(mContext).inflate(R.layout.item_single, parent, false);  
    73.             }  
    74.             /** 一行显示两条 */  
    75.             else {  
    76.                 root = LayoutInflater.from(mContext).inflate(R.layout.item_double, parent, false);  
    77.             }  
    78.         }  
    79.         return new MyRecycleAdapterHolder(root, viewType);  
    80.     }  
    81.   
    82.     /** 
    83.      * 添加自定义头部 
    84.      */  
    85.     public void addHeadView(View view) {  
    86.         this.headView = view;  
    87.     }  
    88.   
    89.     @Override  
    90.     public int getItemViewType(int position) {  
    91.   
    92.         if (position == 0) {  
    93.             return RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM;  
    94.         } else {  
    95.             /** 一行显示一条 */  
    96.             if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {  
    97.                 return RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE;  
    98.                 /** 一行显示两条 */  
    99.             } else {  
    100.                 return RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE;  
    101.             }  
    102.         }  
    103.     }  
    104.   
    105.     public int getSpanSize() {  
    106.         return spanSize;  
    107.     }  
    108.   
    109.     public void setSpanSize(int spanSize) {  
    110.         this.spanSize = spanSize;  
    111.     }  
    112. }  
    import com.example.myrecycleviewdemo.R;
    import com.example.myrecycleviewdemo.RecycleViewWithHead;
    import com.example.myrecycleviewdemo.R.layout;
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.RecyclerView.ViewHolder;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    public class MyRecycleAdapter extends
            RecyclerView.Adapter<MyRecycleAdapterHolder> {
    
        public View headView;
        public Context mContext;
        public int count;
        private int spanSize;// 当前每行显示几列
    
        public MyRecycleAdapter(Context mContext, int count) {
            this.count = count;
            this.mContext = mContext;
        }
    
        /**
         * 设置数据源总的条目
         */
        @Override
        public int getItemCount() {
            // 返回条目数加头布局个数
            return count + 1;
        }
    
        @Override
        public void onBindViewHolder(MyRecycleAdapterHolder holder,
                final int position) {
            int itemViewType = getItemViewType(position);
            // 头部
            if (itemViewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
                return;
            } else {// 普通条目
                if (itemViewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE) {// 一行两列视图
                    holder.iv_item_icon.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Toast.makeText(mContext, "2列," + (position - 1) + "", 0)
                                    .show();
                        }
                    });
                } else if (itemViewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {// 一行一列视图
                    holder.iv_item_icon_single.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Toast.makeText(mContext,"单列," + (position - 1) + "", 0).show();
                        }
                    });
                }
            }
        }
    
        @Override
        public MyRecycleAdapterHolder onCreateViewHolder(ViewGroup parent,
                int viewType) {
            View root = null;
            // 头部
            if (viewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
                root = headView;
            } else {// 普通条目
                /** 一行显示一条 */
                if (viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {
                    root = LayoutInflater.from(mContext).inflate(R.layout.item_single, parent, false);
                }
                /** 一行显示两条 */
                else {
                    root = LayoutInflater.from(mContext).inflate(R.layout.item_double, parent, false);
                }
            }
            return new MyRecycleAdapterHolder(root, viewType);
        }
    
        /**
         * 添加自定义头部
         */
        public void addHeadView(View view) {
            this.headView = view;
        }
    
        @Override
        public int getItemViewType(int position) {
    
            if (position == 0) {
                return RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM;
            } else {
                /** 一行显示一条 */
                if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {
                    return RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE;
                    /** 一行显示两条 */
                } else {
                    return RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE;
                }
            }
        }
    
        public int getSpanSize() {
            return spanSize;
        }
    
        public void setSpanSize(int spanSize) {
            this.spanSize = spanSize;
        }
    }
    


    普通条目的ViewHolder

    1. import com.example.myrecycleviewdemo.R;  
    2. import com.example.myrecycleviewdemo.R.id;  
    3. import com.example.myrecycleviewdemo.RecycleViewWithHead;  
    4. import android.support.v7.widget.RecyclerView;  
    5. import android.view.View;  
    6. import android.widget.ImageView;  
    7. import android.widget.TextView;  
    8.   
    9. public class MyRecycleAdapterHolder extends RecyclerView.ViewHolder{  
    10.     //一行两列视图  
    11.     public ImageView iv_item_icon;  
    12.     public TextView tv_item;  
    13.       
    14.     //一行一列视图  
    15.     public ImageView iv_item_icon_single;  
    16.     public TextView tv_item_single;  
    17.       
    18.     public MyRecycleAdapterHolder(View itemView) {  
    19.         super(itemView);  
    20.     }  
    21.     public MyRecycleAdapterHolder(View itemView,int viewType) {  
    22.         super(itemView);  
    23.         initView(itemView,viewType);  
    24.     }  
    25.     private void initView(View itemView, int viewType) {  
    26.         if(viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE){  
    27.             iv_item_icon = (ImageView) itemView.findViewById(R.id.iv_item_icon);  
    28.             tv_item = (TextView) itemView.findViewById(R.id.tv_item);  
    29.         }else if(viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE){  
    30.             iv_item_icon_single = (ImageView) itemView.findViewById(R.id.iv_item_icon_single);  
    31.             tv_item_single = (TextView) itemView.findViewById(R.id.tv_item_single);  
    32.         }  
    33.     }  
    34. }  
    import com.example.myrecycleviewdemo.R;
    import com.example.myrecycleviewdemo.R.id;
    import com.example.myrecycleviewdemo.RecycleViewWithHead;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MyRecycleAdapterHolder extends RecyclerView.ViewHolder{
        //一行两列视图
        public ImageView iv_item_icon;
        public TextView tv_item;
    
        //一行一列视图
        public ImageView iv_item_icon_single;
        public TextView tv_item_single;
    
        public MyRecycleAdapterHolder(View itemView) {
            super(itemView);
        }
        public MyRecycleAdapterHolder(View itemView,int viewType) {
            super(itemView);
            initView(itemView,viewType);
        }
        private void initView(View itemView, int viewType) {
            if(viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE){
                iv_item_icon = (ImageView) itemView.findViewById(R.id.iv_item_icon);
                tv_item = (TextView) itemView.findViewById(R.id.tv_item);
            }else if(viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE){
                iv_item_icon_single = (ImageView) itemView.findViewById(R.id.iv_item_icon_single);
                tv_item_single = (TextView) itemView.findViewById(R.id.tv_item_single);
            }
        }
    }
    

    头布局文件head.xm没有任何变化

    条目的布局拆分为2个item_double.xml和item_single.xml

    item_double.xml和之前的item.xml一样。


    item_single.xml

    1. <?xml version=“1.0” encoding=“utf-8”?>  
    2. <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
    3.     android:id=“@+id/ll_list”  
    4.     android:layout_width=“wrap_content”  
    5.     android:layout_height=“wrap_content”  
    6.     android:layout_marginLeft=“2dp”  
    7.     android:layout_marginRight=“2dp”  
    8.     android:layout_marginTop=“5dp”  
    9.     android:orientation=“horizontal” >  
    10.   
    11.     <ImageView  
    12.         android:id=“@+id/iv_item_icon_single”  
    13.         android:layout_width=“wrap_content”  
    14.         android:layout_height=“wrap_content”  
    15.         android:src=“@drawable/item” />  
    16.   
    17.     <TextView  
    18.         android:id=“@+id/tv_item_single”  
    19.         android:layout_width=“wrap_content”  
    20.         android:layout_height=“wrap_content”  
    21.         android:layout_gravity=“center_vertical”  
    22.         android:layout_marginTop=“5dp”  
    23.         android:text=“这是一只熊猫” />  
    24.   
    25. </LinearLayout>  
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ll_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:layout_marginTop="5dp"
        android:orientation="horizontal" >
    
        <ImageView
            android:id="@+id/iv_item_icon_single"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/item" />
    
        <TextView
            android:id="@+id/tv_item_single"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginTop="5dp"
            android:text="这是一只熊猫" />
    
    </LinearLayout>


    源码地址:http://download.csdn.NET/detail/linder_qzy/9491370



    展开全文
  • 用android.support.v4.View.ViewPager类写的一个小Demo,可以用来滑动浏览各项条目,简单好用,适合快速上手ViewPager实现滑动效果。
  • sql sum合计某一的值

    万次阅读 2016-08-17 22:04:40
    有如下表table3:   需求: 计算各个国家的人口总和,并显示国家和人口总和两个字段 ...SELECT country,SUM(population) FROM table3 ...sum(expr):计算某一值的总和,与count(expr)不同,count(expr)是计...
  • 6.coo/csr获取非零条目 在计算中可能会遇到删除稀疏矩阵中某些行或者,然后构造新的稀疏矩阵的操作,但是numpy中没有提供相应的功能接口,可以自己动手实现。 1.csr和ndarray互相转换 ndarray->csr ...
  • Windows10手动设置代理

    千次阅读 2021-10-09 10:27:25
    第一步:在Windows10的设置中找到“代理”,在此栏目下面找到“手动设置代理” 第二步:将可以使用的代理...如果在“请勿对以下条目开头的地址使用代理服务器”中配置相关的条目,则表示这些条目是不需要使用代理服务
  • 正在进行中 - 尚未准备好使用:) 任务战士杂志 从 TaskWarrior 条目中提取日志/日记 使每周时间报告更容易的愚蠢努力。 以相反的顺序出 TaskWarrior 日志中上周的更新条目(包括注释)。
  • SAP物料清单MM60中如何统计输出条目数量
  • 所需的Python软件包在requirements.txt ,因此可以使用pip进行安装: pip install -r requirements.txt 为了成功编译由.tex生成的.tex文件,还需要各种LaTeX软件包。 用法 python ConvertSEPHTML.py <URL> [] ...
  • 打开csv文件,可使用excel打开,将标记时间那一的单元格格式改为“yyyy-mm-dd” 在Letterboxd的“Settings”选项中,找到“IMPORT & EXPORT”一栏,选择“IMPORT YOUR DATA”,选择csv文件进行上传 根据Letterboxd...
  • 第一列条目:1、2、3、55、6...... 第 2 列条目:“好”、“差”、“一般”…… 。 。 。 您想用它来训练需要数据为数字形式的数学模型,请遵循以下步骤: 1- 将数据作为字符串数组导入。 2- 调用 FitDataSet 和您...
  • GO功能注释条目

    千次阅读 2021-02-04 15:25:17
    - read.csv("go.csv",header = T) #Go 条目一般只选择最显著的前10个或20个Term来绘图# > head(go) Ontology 1 Biological process 2 Biological process 3 Biological process 4 Biological process 5 ...
  • 在使用iview 的Select选择器可创建条目([官网链接:]时格式化代码后发现显示的值前后有空格(https://www.iviewui.com/components/select#CJTM)) 这样是可以运行的 Eslint格式化代码后 <Row> <...
  • ie浏览器不使用代理设置

    千次阅读 2016-07-05 16:47:10
    如果在局域网内,不使用代理,方式为在 Internet选项上,找 连接-》局域网设置--》高级--》最下面的 对下列字符开头的地址不使用代理服务器中 添加,svn,cmri.cn等信息。
  • 您需要指定货币,外汇金额,汇率来记录付款,收据和其他条目。 您还可以通过将这些保留为空白来导入基础货币代金券。 货币,外汇金额,净资产收益率。 外汇和基础货币要通过外汇导入凭证,请指定货币,外汇金额,...
  • 可以识别的条目在程序的左方已经出。 比如,用户可以说“游戏”,或者“通讯录” 2. 在按动按钮后,会发出“吡”的一声,同时按钮下方的长滚动条开始滚动,用户可以随时 开始说成命令。 一旦用户的声音被程序...
  • 未能在 sysdatabases 中找到数据库 aa1xxxx 所对应的条目。没有找到具有该名称的条目更新时间:2007年08月07日 00:04:08 作者:未能在 sysdatabases 中找到数据库 aa1xxxx 所对应的条目。没有找到具有该名称的条目用...
  • 为了避免混淆网格矩阵的 X/Y 约定,通过仅引用网格中的行和列条目来完全避免该问题。 邀请用户使用他或她习惯使用的任何约定来将笛卡尔坐标映射到网格矩阵条目。 鼓励用户查看代码注释(或“帮助”文本)并运行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,662
精华内容 45,864
关键字:

列条目