资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

android头部,android头部固定

android中添加头部视图的功能怎么实现

ListView是有addHeaderView和 addFooterView两个方法的.

为墨脱等地区用户提供了全套网页设计制作服务,及墨脱网站建设行业解决方案。主营业务为网站设计、成都网站设计、墨脱网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

但是作为官方推荐的ListView的升级版RecyclerView缺无法实现这两个方法。

那么如果使用RecyclerView实现这两个方法的效果该怎么做呢?

网上查询了很久,试过各种各样的实现方式,终于让我发现一个还不错的实现方法,那么就给大家推荐一下。

项目地址(别人写的,非博主的)

我看了下这个源码,很简单,即写了一个继承RecyclerView的控件,自己实现addHeaderView和addFooterView两个方法

?

code

package com.xqx.com.recyclerviewheaderdemo;

import android.content.Context;

import android.support.v7.widget.RecyclerView;

import android.util.AttributeSet;

import android.util.Log;

import android.view.View;

import android.view.ViewGroup;

import java.util.ArrayList;

import java.util.List;

public class XCRecyclerView extends RecyclerView{

private ArrayListView mHeaderViews = new ArrayList();

private ArrayListView mFooterViews = new ArrayList();

private RecyclerView.Adapter mAdapter;

private RecyclerView.Adapter mWrapAdapter;

private static final int TYPE_HEADER = -101;

private static final int TYPE_FOOTER = -102;

private static final int TYPE_LIST_ITEM = - 103;

public XCRecyclerView(Context context) {

this(context, null);

}

public XCRecyclerView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public XCRecyclerView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

init(context);

}

private void init(Context context){

}

@Override

public void setAdapter(Adapter adapter) {

mAdapter = adapter;

mWrapAdapter = new WrapAdapter(mHeaderViews, mFooterViews, adapter);

super.setAdapter(mWrapAdapter);

mAdapter.registerAdapterDataObserver(mDataObserver);

}

public void addHeaderView(View view){

mHeaderViews.clear();

mHeaderViews.add(view);

}

public void addFooterView(View view){

mFooterViews.clear();

mFooterViews.add(view);

}

public int getHeaderViewsCount(){

return mHeaderViews.size();

}

public int getFooterViewsCount(){

return mFooterViews.size();

}

private final RecyclerView.AdapterDataObserver mDataObserver = new RecyclerView.AdapterDataObserver() {

@Override

public void onChanged() {

mWrapAdapter.notifyDataSetChanged();

}

@Override

public void onItemRangeChanged(int positionStart, int itemCount) {

mWrapAdapter.notifyItemRangeChanged(positionStart, itemCount);

}

// @Override

// public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {

// mWrapAdapter.notifyItemRangeChanged(positionStart, itemCount, payload);

// }

@Override

public void onItemRangeInserted(int positionStart, int itemCount) {

mWrapAdapter.notifyItemRangeInserted(positionStart, itemCount);

}

@Override

public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {

mWrapAdapter.notifyItemMoved(fromPosition, toPosition);

}

@Override

public void onItemRangeRemoved(int positionStart, int itemCount) {

mWrapAdapter.notifyItemRangeRemoved(positionStart, itemCount);

}

};

private class WrapAdapter extends RecyclerView.AdapterViewHolder{

private Adapter mAdapter;

private ListView mHeaderViews;

private ListView mFooterViews;

public WrapAdapter(ListView headerViews,ListView footerViews,Adapter adapter){

this.mAdapter = adapter;

this.mHeaderViews = headerViews;

this.mFooterViews = footerViews;

}

public int getHeaderCount(){

return this.mHeaderViews.size();

}

public int getFooterCount(){

return this.mFooterViews.size();

}

public boolean isHeader(int position){

return position = 0 position this.mHeaderViews.size();

}

public boolean isFooter(int position){

return position getItemCount() position = getItemCount() - this.mFooterViews.size();

}

@Override

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

if(viewType == TYPE_HEADER){

return new CustomViewHolder(this.mHeaderViews.get(0));

}else if(viewType == TYPE_FOOTER){

return new CustomViewHolder(this.mFooterViews.get(0));

}else{

return this.mAdapter.onCreateViewHolder(parent,viewType);

}

}

@Override

public void onBindViewHolder(ViewHolder holder, int position) {

if(isHeader(position)) return;

if(isFooter(position)) return;

int rePosition = position - getHeaderCount();

int itemCount = this.mAdapter.getItemCount();

if(this.mAdapter != null){

if(rePosition itemCount){

Log.v("czm","rePosition/itemCount="+rePosition+"/"+itemCount);

this.mAdapter.onBindViewHolder(holder,rePosition);

return;

}

}

}

@Override

public long getItemId(int position) {

if (this.mAdapter != null position = getHeaderCount()) {

int rePosition = position - getHeaderCount();

int itemCount = this.mAdapter.getItemCount();

if (rePosition itemCount) {

return this.mAdapter.getItemId(rePosition);

}

}

return -1;

}

@Override

public int getItemViewType(int position) {

if(isHeader(position)){

return TYPE_HEADER;

}

if(isFooter(position)){

return TYPE_FOOTER;

}

int rePosition = position - getHeaderCount();

int itemCount = this.mAdapter.getItemCount();

if(rePosition itemCount){

return this.mAdapter.getItemViewType(position);

}

return TYPE_LIST_ITEM;

}

@Override

public int getItemCount() {

if(this.mAdapter != null){

return getHeaderCount() + getFooterCount() + this.mAdapter.getItemCount();

}else{

return getHeaderCount() + getFooterCount();

}

}

@Override

public void registerAdapterDataObserver(AdapterDataObserver observer) {

if(this.mAdapter != null){

this.mAdapter.registerAdapterDataObserver(observer);

}

}

@Override

public void unregisterAdapterDataObserver(AdapterDataObserver observer) {

if(this.mAdapter != null){

this.mAdapter.unregisterAdapterDataObserver(observer);

}

}

private class CustomViewHolder extends ViewHolder{

public CustomViewHolder(View itemView) {

super(itemView);

}

}

}

}

XCRecyclerView

使用方法github里也写的清清楚楚的

?

code

private MyAdapter mAdapter;

private XCRecyclerView mRecyclerView;

private ListString mData;

private View mHeaderView;

private View mFooterView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mData = new ArrayListString();

for(int i = 0; i 10 ;i++){

mData.add("item_" + i);

}

mAdapter = new MyAdapter(mData);

mRecyclerView = (XCRecyclerView) findViewById(R.id.recycler_view);

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

mHeaderView = LayoutInflater.from(this).inflate(R.layout.layout_header,mRecyclerView,false);

mFooterView = LayoutInflater.from(this).inflate(R.layout.layout_footer,mRecyclerView,false);

mRecyclerView.addHeaderView(mHeaderView);

mRecyclerView.addFooterView(mFooterView);

mRecyclerView.setAdapter(mAdapter);

}

注意点:

addHeaderView之后 列表的数据坐标即相应发生变化!即addHeadView一次,列表第一个数据的下坐标+1(0--1)

android 头部悬浮上边怎么做

1.目标组件(button)有两套,放在顶部和内容中间;

2.当内容中间的组件滑动至顶部栏位置时控制显示/隐藏顶部和中间的组件(涉及到组件获取在屏幕的位置知识点);

activity代码:

public class MainActivity extends AppCompatActivity implements ObservableScrollView.ScrollViewListener {

private ObservableScrollView scrollView;

private Button topBtn1, topBtn2, middleBtn1, middleBtn2;

private View topPanel, middlePanel;

private int topHeight;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

initListeners();

Android Studio添加头部注释模板

第一种:点击File - Settings - Editor - File and Code Templates

第二种:点击File - Settings - Editor - Live Template

这样当新建一个类或者方法后,在类或方法名上面输入缩写(cc或cm),就会有提示是否添加类注释。

Shift+Alt+G 添加注释 Shift+Alt+Z 取消注释

如何去掉android头部label的方法

方法一:在AndroidManifest.xml中

application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@android:style/Theme.NoTitleBar"

添加theme属性为NoTitleBar就可以了。

方法二:在MainActivity.java中

@Override

public void onCreate (Bundle savedInstanceState) {

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

把requestWindowFeature()方法添加在setContentView()方法之前,这个方法只是把标题隐藏了。

普通安卓头叫什么

一头叫USB一头叫TYPEC。普通安卓接口就叫做安卓接口也叫做USB连接线,安卓头指的是手机安卓系统的充电插头的意思。手机充电器大致可以分为旅行充电器、座式充电器和维护型充电器,一般用户接触的主要是前面两种。而市场上卖得最多的是旅行充电器。

安卓充电功率

手机常用锂离子电池的充电器采用的是恒流限压充电制,充电电流一般采用C2左右即采用两小时充电率,比如500mAh电池采用250mA充电大约两小时达到42V后再恒压充电。

lion电池并不适合采用NIMH电池高级快速充电器所用的-DV/DT检测快速充电方式,因为lion电池对充电电流有严格的限制.锂离子非常活泼,大电流充电很容易产生危险。


分享题目:android头部,android头部固定
URL地址:http://cdkjz.cn/article/dsdooci.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220