try
字母索引(城市和通讯录)
IndexableRecyclerView
城市索引
通讯录索引
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<me.yokeyword.indexablerv.IndexableLayout
android:id="@+id/indexableLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:indexBar_background="#08000000"
app:indexBar_layout_width="50dp"
app:indexBar_textColor="@android:color/black"
app:indexBar_textSpace="8dp"/>
</LinearLayout>
public class FragmentMovie extends BaseFragment {
private List<CityEntity> mDatas;
private SimpleHeaderAdapter<CityEntity> mHotCityAdapter;
@Override
protected int getLayoutId() {
return R.layout.fragment_movie;
}
@Override
protected void initView(View view) {
IndexableLayout indexableLayout = (IndexableLayout) view.findViewById(R.id.indexableLayout);
indexableLayout.setLayoutManager(
new GridLayoutManager(
this.getContext(),
1));
CityAdapter adapter =
new CityAdapter(
this.getContext());
indexableLayout.setAdapter(adapter);
mDatas = initDatas();
indexableLayout.setCompareMode(IndexableLayout.MODE_FAST);
adapter.setDatas(mDatas,
new IndexableAdapter.IndexCallback<CityEntity>() {
@Override
public void onFinished(List<EntityWrapper<CityEntity>> datas) {
}
});
adapter.setOnItemContentClickListener(
new IndexableAdapter.OnItemContentClickListener<CityEntity>() {
@Override
public void onItemClick(View v,
int originalPosition,
int currentPosition, CityEntity entity) {
}
});
adapter.setOnItemContentClickListener(
new IndexableAdapter.OnItemContentClickListener<CityEntity>() {
@Override
public void onItemClick(View v,
int originalPosition,
int currentPosition, CityEntity entity) {
if (originalPosition >=
0) {
ToastUtil.showShort(getContext(),
"选中:" + entity.getName() +
" 当前位置:" + currentPosition +
" 原始所在数组位置:" + originalPosition);
}
else {
ToastUtil.showShort(getContext(),
"选中Header:" + entity.getName() +
" 当前位置:" + currentPosition);
}
}
});
adapter.setOnItemTitleClickListener(
new IndexableAdapter.OnItemTitleClickListener() {
@Override
public void onItemClick(View v,
int currentPosition, String indexTitle) {
ToastUtil.showShort(getContext(),
"选中:" + indexTitle +
" 当前位置:" + currentPosition);
}
});
mHotCityAdapter =
new SimpleHeaderAdapter<>(adapter,
"热门",
"热门城市", iniyHotCityDatas());
indexableLayout.addHeaderAdapter(mHotCityAdapter);
final List<CityEntity> gpsCity = iniyGPSCityDatas();
final SimpleHeaderAdapter gpsHeaderAdapter =
new SimpleHeaderAdapter<>(adapter,
"定位",
"当前城市", gpsCity);
indexableLayout.addHeaderAdapter(gpsHeaderAdapter);
indexableLayout.postDelayed(
new Runnable() {
@Override
public void run() {
gpsCity.get(
0).setName(
"杭州市");
gpsHeaderAdapter.notifyDataSetChanged();
}
},
3000);
}
private List<CityEntity>
iniyGPSCityDatas() {
List<CityEntity> list =
new ArrayList<>();
list.add(
new CityEntity(
"定位中..."));
return list;
}
private List<CityEntity>
initDatas() {
List<CityEntity> list =
new ArrayList<>();
List<String> cityStrings = Arrays.asList(getResources().getStringArray(R.array.city_array));
for (String item : cityStrings) {
CityEntity cityEntity =
new CityEntity();
cityEntity.setName(item);
list.add(cityEntity);
}
return list;
}
private List<CityEntity>
iniyHotCityDatas() {
List<CityEntity> list =
new ArrayList<>();
list.add(
new CityEntity(
"杭州市"));
list.add(
new CityEntity(
"北京市"));
list.add(
new CityEntity(
"上海市"));
list.add(
new CityEntity(
"广州市"));
return list;
}
}
CityAdapter
package com.mine.moviedemo.entity;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.mine.moviedemo.R;
import me.yokeyword.indexablerv.IndexableAdapter;
/**
* Created by YoKey on 16/10/7.
*/
public
class CityAdapter extends IndexableAdapter<CityEntity> {
private LayoutInflater mInflater;
public CityAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
@Override
public RecyclerView.ViewHolder onCreateTitleViewHolder(ViewGroup parent) {
View view = mInflater.inflate(R.layout.item_index_city, parent,
false);
return new IndexVH(view);
}
@Override
public RecyclerView.ViewHolder onCreateContentViewHolder(ViewGroup parent) {
View view = mInflater.inflate(R.layout.item_city, parent,
false);
return new ContentVH(view);
}
@Override
public void onBindTitleViewHolder(RecyclerView.ViewHolder holder, String indexTitle) {
IndexVH vh = (IndexVH) holder;
vh.tv.setText(indexTitle);
}
@Override
public void onBindContentViewHolder(RecyclerView.ViewHolder holder, CityEntity entity) {
ContentVH vh = (ContentVH) holder;
vh.tv.setText(entity.getName());
}
private class IndexVH extends RecyclerView.ViewHolder {
TextView tv;
public IndexVH(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv_index);
}
}
private class ContentVH extends RecyclerView.ViewHolder {
TextView tv;
public ContentVH(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv_name);
}
}
}
CityEntity
package com.mine.moviedemo.entity;
import me.yokeyword.indexablerv.IndexableEntity;
/**
* Created by a on 2017/4/14.
*/
public class CityEntity implements IndexableEntity {
private long id;
private String name;
private String pinyin;
public CityEntity() {
}
public CityEntity(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(
long id) {
this.id = id;
}
public String
getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String
getPinyin() {
return pinyin;
}
public void setPinyin(String pinyin) {
this.pinyin = pinyin;
}
@Override
public String
getFieldIndexBy() {
return name;
}
@Override
public void setFieldIndexBy(String indexByField) {
this.name = indexByField;
}
@Override
public void setFieldPinyinIndexBy(String pinyin) {
this.pinyin = pinyin;
}
}
EasyRecyclerView
将开发中常用的RecyclerView的各种需求封装进库。 并且adapter支持数据管理,Header与Footer添加,加载更多。没有更多。加载错误
轮播图
android图片轮播效果,RollViewPager的简单使用 RollViewPager的github
另一个轮播图Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加载框架等!
导入第三方的moudle时,最好先把三方的demo先导入一次,导入demo时,修改所有的(项目的gradle和moudle的gradle都要改) ‘compileSdkVersion 25 buildToolsVersion “25.0.3”’ 然后修改项目的gradle目录下的两个文件,用本地文件去替换他们 这样就可以运行这个demo了 运行无误后,把这个改装后的moudle导入自己的项目即可,记得 ’ compile project(‘:banner’)’, 这是还可能有错误,就需要对照原demo中的gradle文件,去添加一些代码
<?xml version=
"1.0" encoding=
"utf-8"?>
<android
.support.v4
.widget.SwipeRefreshLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/refresh"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical">
<android
.support.v4
.widget.NestedScrollView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent">
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical">
★ <
com.jude.rollviewpager.RollPagerView
android:id=
"@+id/rollPager"
android:layout_width=
"match_parent"
android:layout_height=
"180dp"
app:rollviewpager_play_delay=
"3000"/>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:text=
"@string/content"/>
</LinearLayout>
</android
.support.v4
.widget.NestedScrollView>
</android
.support.v4
.widget.SwipeRefreshLayout>
package com.mine.moviedemo.fragment;
import android.graphics.Color;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import com.jude.rollviewpager.RollPagerView;
import com.jude.rollviewpager.adapter.StaticPagerAdapter;
import com.jude.rollviewpager.hintview.ColorPointHintView;
import com.mine.moviedemo.R;
import com.mine.moviedemo.base.BaseFragment;
/**
* Created by a on 2017/4/13.
*/
public class FragmentHome extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener {
private SwipeRefreshLayout mRefresh;
private View view;
private RollPagerView mRollViewPager;
@Override
protected void initView(View view) {
this.view = view;
mRefresh = (SwipeRefreshLayout) view.findViewById(R.id.refresh);
mRefresh.setOnRefreshListener(
this);
mRollViewPager = (RollPagerView) view.findViewById(R.id.rollPager);
mRollViewPager.setPlayDelay(
1000);
mRollViewPager.setAnimationDurtion(
500);
mRollViewPager.setAdapter(
new TestNormalAdapter());
mRollViewPager.setHintView(
new ColorPointHintView(getContext(), Color.YELLOW, Color.WHITE));
}
private class TestNormalAdapter extends StaticPagerAdapter {
private int[] imgs = {
R.mipmap.img1,
R.mipmap.img2,
R.mipmap.img3,
};
@Override
public View
getView(ViewGroup container,
int position) {
ImageView view =
new ImageView(container.getContext());
view.setImageResource(imgs[position]);
view.setScaleType(ImageView.ScaleType.CENTER_CROP);
view.setLayoutParams(
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return view;
}
@Override
public int getCount() {
return imgs.length;
}
}
@Override
protected int getLayoutId() {
return R.layout.fragment_home;
}
@Override
public void onRefresh() {
Toast.makeText(getContext(),
"开始刷新", Toast.LENGTH_SHORT).show();
view.postDelayed(
new Runnable() {
@Override
public void run() {
Toast.makeText(getContext(),
"开始完毕", Toast.LENGTH_SHORT).show();
mRefresh.setRefreshing(
false);
}
},
1500);
}
}