listview滑动加载,不滑动不加载,这是俩个不同的布局,有疑问求前辈解答
运行起来,发现效果差很多,可是逻辑思路没问题啊,希望前辈指点迷津
MainActivity的内容:
package com.ex.listview_27;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.view.ScrollingView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView listview;
private MyAdapter myAdapter;
private String [] img_uri ={"http://7xku6s.com1.z0.glb.clouddn.com/qq0.png","http://7xku6s.com1.z0.glb.clouddn.com/qq1.png",
"http://7xku6s.com1.z0.glb.clouddn.com/qq2.png","http://7xku6s.com1.z0.glb.clouddn.com/qq3.png",
"http://7xku6s.com1.z0.glb.clouddn.com/qq4.png","http://7xku6s.com1.z0.glb.clouddn.com/qq5.png",
"http://7xku6s.com1.z0.glb.clouddn.com/aa.jpg","http://7xku6s.com1.z0.glb.clouddn.com/bb.jpg",
"http://7xku6s.com1.z0.glb.clouddn.com/cc.jpg","http://7xku6s.com1.z0.glb.clouddn.com/dd.jpg"};
public static String LAG = "MainActivity";
private ImageLoader imageLoader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(MainActivity.this));
listview = (ListView) findViewById(R.id.listview);
myAdapter = new MyAdapter();
listview.setOnScrollListener(myAdapter);
listview.setAdapter(myAdapter);
}
class MyAdapter extends ScrollAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return img_uri[position%10];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
protected View getScrollView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewholder;
if(convertView==null){
convertView = getLayoutInflater().inflate(R.layout.defaultlayout, null);
viewholder = new ViewHolder();
viewholder.img_default = (ImageView)convertView.findViewById(R.id.img_default);
viewholder.tv_default = (TextView)convertView.findViewById(R.id.tv_default);
convertView.setTag(viewholder);
}else{
viewholder = (ViewHolder) convertView.getTag();
}
viewholder.img_default.setImageResource(R.drawable.ic_launcher);
viewholder.tv_default.setText("加载中。。。");
return convertView;
}
@Override
protected View getNomarlView(int position, View convertView, ViewGroup parent) {
ViewHolder viewholder;
if(convertView==null){
convertView = getLayoutInflater().inflate(R.layout.defaultlayout, null);
viewholder = new ViewHolder();
viewholder.img_default = (ImageView)convertView.findViewById(R.id.img_default);
viewholder.tv_default = (TextView)convertView.findViewById(R.id.tv_default);
convertView.setTag(viewholder);
}else{
viewholder = (ViewHolder) convertView.getTag();
}
imageLoader.displayImage(img_uri[position%10], viewholder.img_default);
viewholder.tv_default.setText(position+"");
return convertView;
}
class ViewHolder{
ImageView img_default;
TextView tv_default;
}
}
@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) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
ScrollAdapter:
package com.ex.listview_27;
import java.util.HashMap;
import android.R.integer;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
public abstract class ScrollAdapter extends BaseAdapter implements OnScrollListener
{
protected abstract View getScrollView(int position, View convertView, ViewGroup parent);
protected abstract View getNomarlView(int position, View convertView, ViewGroup parent);
private boolean mIsScroll;
// private SparseBooleanArray mIsScrollArray;
// public ScrollAdapter()
// {
// mIsScrollArray = new SparseBooleanArray();
// }
@Override
public final View getView(int position, View convertView, ViewGroup parent)
{
// mIsScrollArray.put(position, mIsScroll);
Log.e("getView", "getView " +Utils.hashMap.get(position));
if (!mIsScroll)
{
Utils.hashMap.put(position, "1");
Log.e("getView", "getView " +Utils.hashMap.get(position));
return getNomarlView(position, convertView, parent);
}
// Utils.hashMap.put(position, "2");
Log.e("getView", "getView " +Utils.hashMap.get(position));
return getScrollView(position, convertView, parent);
}
@Override
public void onScrollStateChanged(AbsListView parent, int scrollState)
{
switch (scrollState)
{
case OnScrollListener.SCROLL_STATE_IDLE:
mIsScroll = false;
int first = parent.getFirstVisiblePosition();
int count = parent.getChildCount();
for (int position = first; position < count; position++)
{
// if (mIsScroll)
// {
// break;
// }
// try
// {
Log.e("getView", "getView " +Utils.hashMap.get(position));
View convertView = parent.getChildAt(position);
if (!("1").equals("1"))
{
// mIsScrollArray.put(position, false);
getNomarlView(position, convertView, parent);
Utils.hashMap.put(position, "1");
}
// } catch (Exception e)
// {
// }
}
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
mIsScroll = true;
break;
case OnScrollListener.SCROLL_STATE_FLING:
mIsScroll = true;
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
}
}
utils :
package com.ex.listview_27;
import java.util.HashMap;
public class Utils {
public static HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
}
activity_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"
tools:context="com.ex.listview_27.MainActivity" >
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
default_layout:
<?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/img_default"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="31dp"
android:layout_marginTop="161dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv_default"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView1"
android:layout_alignParentRight="true"
android:layout_marginBottom="36dp"
android:layout_marginRight="30dp"
android:text="加载中。。。" />
</RelativeLayout>