展会信息港展会大全

android ListView Item 点击展开隐藏问题
来源:互联网   发布日期:2015-11-26 09:36:44   浏览:2240次  

导读:当数据量较大,listview超过一屏时convertview重用就会出现问题,因此在此做出了一点点改进,以适用于大量数据的情形:public class ListAdapter extends BaseAdapter {private Context mContext;private......

当数据量较大,listview超过一屏时convertview重用就会出现问题,因此在此做出了一点点改进,以适用于大量数据的情形:

public class ListAdapter extends BaseAdapter {

private Context mContext;

private View mLastView;

private int mLastPosition;

private int mLastVisibility;

public ListAdapter(Context context) {

this.mContext = context;

mLastPosition = -1;

}

@Override

public int getCount() {

return 30;

}

@Override

public Object getItem(int position) {

return null;

}

@Override

public long getItemId(int position) {

return 0;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

Holder holder;

if(convertView == null ) {

LayoutInflater inflater = LayoutInflater.from(mContext);

convertView = inflater.inflate(R.layout.list_item, null);

holder =new Holder();

holder.textView = (TextView)convertView.findViewById(R.id.textView);

holder.UEFAView = (ImageView)convertView.findViewById(R.id.image_uefa);

holder.mascotView = (ImageView)convertView.findViewById(R.id.image_mascot);

holder.hint = convertView.findViewById(R.id.hint_image);

convertView.setTag(holder);

} else {

holder = (Holder) convertView.getTag();

}

if(mLastPosition == position){

holder.hint.setVisibility(mLastVisibility);

}else{

holder.hint.setVisibility(View.GONE);

}

holder.textView.setText("Hello,It is " + position);

return convertView;

}

class Holder {

TextView textView;

ImageView UEFAView;

ImageView mascotView;

View hint;

}

public void changeImageVisable(View view,int position) {

if(mLastView != null && mLastPosition != position ) {

Holder holder = (Holder) mLastView.getTag();

switch(holder.hint.getVisibility()) {

case View.VISIBLE:

holder.hint.setVisibility(View.GONE);

mLastVisibility = View.GONE;

break;

default :

break;

}

}

mLastPosition = position;

mLastView = view;

Holder holder = (Holder) view.getTag();

switch(holder.hint.getVisibility()) {

case View.GONE:

holder.hint.setVisibility(View.VISIBLE);

mLastVisibility = View.VISIBLE;

break;

case View.VISIBLE:

holder.hint.setVisibility(View.GONE);

mLastVisibility = View.GONE;

break;

}

}

}

主要是增加了一个mLastVisibility记录对应mLsatPosition的视图可见属性。

干脆把其他的代码也贴出来吧:

public class ListViewTestActivity extends Activity implements OnItemClickListener{

private ListView mListView;

private ListAdapter mAdapter;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mListView = (ListView)findViewById(R.id.list);

mAdapter = new ListAdapter(this);

mListView.setAdapter(mAdapter);

mListView.setOnItemClickListener(this);

}

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

mAdapter.changeImageVisable(view, position);

}

}

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="ListView Test" />

<ListView

android:id="@+id/list"

android:layout_width="wrap_content"

android:layout_height="fill_parent"

/>

</LinearLayout>

<?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="wrap_content"

android:orientation="vertical"

>

<TextView

android:id="@+id/textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Test"

android:textSize="20sp"

/>

<LinearLayout

android:id="@+id/hint_image"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:visibility="gone">

<ImageView

android:id="@+id/image_uefa"

android:layout_width="0dp"

android:layout_height="60dp"

android:layout_weight="1"

android:src="@drawable/uefa"

/>

<ImageView

android:id="@+id/image_mascot"

android:layout_width="0dp"

android:layout_height="60dp"

android:layout_weight="1"

android:src="@drawable/mascot"

/>

</LinearLayout>

</LinearLayout>

赞助本站

人工智能实验室

相关热词: Item 点击 展开 隐藏

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港