listview 滑动更改标题
2015-10-18 00:00
253 查看
摘要: 大家好 又到了给你分享代码的时刻 一直在看别人app 然后仿照别人app 发现别人的listview滑动title变化特别好 网上的框架也看了 太麻烦了 现在分享一个简单的给大家 但是没有那么好 不过基本上可以满足你们的要求,屁话不说帖代码
package com.example.listviewtest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
import org.w3c.dom.Text;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
ListView listview;
HashMap<Integer,String> hashMap=new HashMap<Integer,String>();
ArrayList<String> arrayList=new ArrayList<String>();
private TextView textView;
private int fir;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView)findViewById(R.id.lt);
textView = (TextView)findViewById(R.id.bt);
textView.setText("biaoti1");
for (int i = 0; i <90; i++) {//模仿从网络中获取的json数据
if(i<10){
if(!arrayList.contains("biaoti1")){
arrayList.add("biaoti1");//标题只有一个
hashMap.put(arrayList.size()-1,"biaoti1");//hashmap 记录所有的标题位置
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti1");
}
else if(10<=i&&i<20){
if(!arrayList.contains("biaoti2")){
arrayList.add("biaoti2");
hashMap.put(arrayList.size()-1,"biaoti2");
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti2");
}
else if(20<=i&&i<30){
if(!arrayList.contains("biaoti3")){
arrayList.add("biaoti3");
hashMap.put(arrayList.size()-1,"biaoti3");
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti3");
}
else if(30<=i&&i<40){
if(!arrayList.contains("biaoti4")){
arrayList.add("biaoti4");
hashMap.put(arrayList.size()-1,"biaoti4");
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti4");
}
else if(40<=i){
if(!arrayList.contains("biaoti5")){
arrayList.add("biaoti5");
hashMap.put(arrayList.size()-1,"biaoti5");
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti5");
}
}
MyAdater myAdater = new MyAdater();
listview.setAdapter(myAdater);
listview.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
String nowTitle=textView.getText().toString();
if(hashMap.get(firstVisibleItem+1)!=nowTitle){//下滑
textView.setText(hashMap.get(firstVisibleItem+1));
}
else if(hashMap.get(firstVisibleItem)!=nowTitle){//上
textView.setText(nowTitle);
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
class MyAdater extends BaseAdapter{
private View view;
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList==null?0:arrayList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getViewTypeCount() {//重写的时候必须带上 不然报错
// TODO Auto-generated method stub
return 2;
}
@Override
public int getItemViewType(int position) {//获取相对应的标题
// TODO Auto-generated method stub
if(!arrayList.contains("biaoti")){
return 1;
}
else {
return 0;
}
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
int type = getItemViewType(arg0);
if(arg1==null){
if(type==0){
view = getLayoutInflater().inflate(R.layout.title,null);
MyTitle myTitle=new MyTitle();
myTitle.title=(TextView)view.findViewById(R.id.title);
view.setTag(myTitle);
}
else if(type==1){
view=getLayoutInflater().inflate(R.layout.item,null);
MyItem myItem=new MyItem();
myItem.title=(TextView)view.findViewById(R.id.tv);
view.setTag(myItem);
}
}
else {
view=arg1;
}
switch (type) {
case 0:
MyTitle myTitle=(MyTitle)view.getTag();
myTitle.title.setText(arrayList.get(arg0));
break;
case 1:
MyItem myItem=(MyItem)view.getTag();
myItem.title.setText(arrayList.get(arg0));
break;
default:
break;
}
return view;
}
class MyTitle {
TextView title;
}
class MyItem{
TextView title;
}
}
}
布局:activety_main
<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" >
<ListView
android:id="@+id/lt"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/holo_green_dark"
android:gravity="center"
android:text="biaotu" />
</RelativeLayout>
item.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" >
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="nihao"
/>
</LinearLayout>
title.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" >
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="biaoti"
android:textColor="@android:color/holo_blue_dark" />
</LinearLayout>
package com.example.listviewtest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
import org.w3c.dom.Text;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
ListView listview;
HashMap<Integer,String> hashMap=new HashMap<Integer,String>();
ArrayList<String> arrayList=new ArrayList<String>();
private TextView textView;
private int fir;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView)findViewById(R.id.lt);
textView = (TextView)findViewById(R.id.bt);
textView.setText("biaoti1");
for (int i = 0; i <90; i++) {//模仿从网络中获取的json数据
if(i<10){
if(!arrayList.contains("biaoti1")){
arrayList.add("biaoti1");//标题只有一个
hashMap.put(arrayList.size()-1,"biaoti1");//hashmap 记录所有的标题位置
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti1");
}
else if(10<=i&&i<20){
if(!arrayList.contains("biaoti2")){
arrayList.add("biaoti2");
hashMap.put(arrayList.size()-1,"biaoti2");
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti2");
}
else if(20<=i&&i<30){
if(!arrayList.contains("biaoti3")){
arrayList.add("biaoti3");
hashMap.put(arrayList.size()-1,"biaoti3");
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti3");
}
else if(30<=i&&i<40){
if(!arrayList.contains("biaoti4")){
arrayList.add("biaoti4");
hashMap.put(arrayList.size()-1,"biaoti4");
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti4");
}
else if(40<=i){
if(!arrayList.contains("biaoti5")){
arrayList.add("biaoti5");
hashMap.put(arrayList.size()-1,"biaoti5");
}
arrayList.add(i+"");
hashMap.put(arrayList.size()-1,"biaoti5");
}
}
MyAdater myAdater = new MyAdater();
listview.setAdapter(myAdater);
listview.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
String nowTitle=textView.getText().toString();
if(hashMap.get(firstVisibleItem+1)!=nowTitle){//下滑
textView.setText(hashMap.get(firstVisibleItem+1));
}
else if(hashMap.get(firstVisibleItem)!=nowTitle){//上
textView.setText(nowTitle);
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
class MyAdater extends BaseAdapter{
private View view;
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList==null?0:arrayList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getViewTypeCount() {//重写的时候必须带上 不然报错
// TODO Auto-generated method stub
return 2;
}
@Override
public int getItemViewType(int position) {//获取相对应的标题
// TODO Auto-generated method stub
if(!arrayList.contains("biaoti")){
return 1;
}
else {
return 0;
}
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
int type = getItemViewType(arg0);
if(arg1==null){
if(type==0){
view = getLayoutInflater().inflate(R.layout.title,null);
MyTitle myTitle=new MyTitle();
myTitle.title=(TextView)view.findViewById(R.id.title);
view.setTag(myTitle);
}
else if(type==1){
view=getLayoutInflater().inflate(R.layout.item,null);
MyItem myItem=new MyItem();
myItem.title=(TextView)view.findViewById(R.id.tv);
view.setTag(myItem);
}
}
else {
view=arg1;
}
switch (type) {
case 0:
MyTitle myTitle=(MyTitle)view.getTag();
myTitle.title.setText(arrayList.get(arg0));
break;
case 1:
MyItem myItem=(MyItem)view.getTag();
myItem.title.setText(arrayList.get(arg0));
break;
default:
break;
}
return view;
}
class MyTitle {
TextView title;
}
class MyItem{
TextView title;
}
}
}
布局:activety_main
<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" >
<ListView
android:id="@+id/lt"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/holo_green_dark"
android:gravity="center"
android:text="biaotu" />
</RelativeLayout>
item.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" >
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="nihao"
/>
</LinearLayout>
title.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" >
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="biaoti"
android:textColor="@android:color/holo_blue_dark" />
</LinearLayout>
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- android中ListView数据刷新时的同步方法
- Android提高之ListView实现自适应表格的方法
- Android中实现水平滑动(横向滑动)ListView示例
- C#实现ListView选中项向上或向下移动的方法
- C# listview添加combobox到单元格的实现代码
- ListView Adapter优化 实例
- Android用ListView显示SDCard文件列表的小例子
- Adapter实现ListView带多选框等状态的自定义控件的注意事项
- asp.net ListView 数据绑定
- Android之ScrollView嵌套ListView和GridView冲突的解决方法
- android ListView和ProgressBar(进度条控件)的使用方法
- Android实现ListView异步加载图片的方法
- Android中ListView下拉刷新的实现方法实例分析
- C#实现读取DataSet数据并显示在ListView控件中的方法
- Repeater与ListView功能概述及使用介绍
- Android开发之ListView列表刷新和加载更多实现方法