listView item 部分刷新

来源:互联网 发布:深入理解java反射机制 编辑:程序博客网 时间:2024/06/04 19:55

1 自定义view
2 自定义点击事件

package com.example.recyclerview_test.view;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.widget.ListView;/** * Created by wffei on 16/9/11. */public class MyListView extends ListView {    public MyListView(Context context) {        super(context);    }    public MyListView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }   public void updateItemPosition( int position , RefreshItemListener refreshItemListener){        if(position>= getFirstVisiblePosition()  && position<= getLastVisiblePosition()){            refreshItemListener.onRefreshItem(this.getChildAt(position-getFirstVisiblePosition()));        }    }    public interface RefreshItemListener {        void onRefreshItem(View view);    }}

test例子

package com.example.recyclerview_test;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.RadioButton;import android.widget.TextView;import android.widget.Toast;import com.example.recyclerview_test.view.MyListView;import java.util.ArrayList;import java.util.List;public class MainListActivity extends Activity {    private List<MyItem> datas;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_list);        initView();    }    MyListView myListView;    private void initView() {         myListView = (MyListView) findViewById(R.id.myListView);        setAdapter();        myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                MyItem dataItem = (MyItem) adapter.getItem(i);                dataItem.status=1;                Toast.makeText(MainListActivity.this,""+1,Toast.LENGTH_SHORT).show();                myListView.updateItemPosition(i, new MyListView.RefreshItemListener() {                    @Override                    public void onRefreshItem(View view) {                        RadioButton radioButton = (RadioButton) view.findViewById(R.id.item_rad);                        radioButton.setChecked(false);                    }                });            }        });    }    MyAdapter adapter;    private void setAdapter() {        List<MyItem> datas = getDatas();         adapter = new MyAdapter(datas, MainListActivity.this);        myListView.setAdapter(adapter);    }    public List<MyItem> getDatas() {        List<MyItem> datas =new ArrayList<MyItem>();        MyItem item1 =new MyItem("1",0);        datas.add(item1);        MyItem item2 =new MyItem("2",0);        datas.add(item2);        MyItem item3 =new MyItem("3",0);        datas.add(item3);        MyItem item4 =new MyItem("4",0);        datas.add(item4);        for(int i=0;i<20;i++){            MyItem item5 =new MyItem("5",0);            datas.add(item5);        }        return datas;    }    class  MyItem {        public  String id;        public int status;        public MyItem(String id, int status) {            this.id = id;            this.status = status;        }    }    class MyAdapter extends BaseAdapter{        List<MyItem> datas;        Context context;        public MyAdapter(List<MyItem> datas, Context context) {            this.datas = datas;            this.context = context;        }        @Override        public int getCount() {            return datas.size();        }        @Override        public Object getItem(int i) {            return datas.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            MyHolder holder;            if(view==null){                 view = LayoutInflater.from(context).inflate(R.layout.adapter_item,null);                holder =new MyHolder();                holder.radioButton = (RadioButton) view.findViewById(R.id.item_rad);                holder.textView = (TextView) view.findViewById(R.id.item_title);                view.setTag(holder);            }            else{                holder = (MyHolder) view.getTag();            }             MyItem item =datas.get(i);            if(item.status==0){                holder.radioButton.setChecked(true);            }            else{                holder.radioButton.setChecked(false);            }            holder.textView.setText(item.id);            return view;        }    }    class MyHolder {        public RadioButton radioButton;        public TextView textView;    }}

adapter.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:gravity="center_vertical"    android:descendantFocusability="blocksDescendants"    android:layout_width="match_parent"    android:layout_height="wrap_content">    <RadioButton        android:clickable="false"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="1"        android:padding="10dp"        android:id="@+id/item_rad"        android:layout_gravity="center_horizontal" />    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textAppearance="?android:attr/textAppearanceLarge"        android:id="@+id/item_title" /></LinearLayout>
0 0
原创粉丝点击