android重写适配器

<h1>重写listview适配器


criadapter.java:


    public class criadapter extends BaseAdapter {
private List<HashMap<String, Object>> mData;


public criadapter( List<HashMap<String, Object>> data) { //用于加载listview中的数据
mData = data;
}


        //以下直到getview都为必须有的方法
public int getCount() {
return mData.size();
}




public Object getItem(int position) {
return mData.get(position);
}



public long getItemId(int position) {
return position;
}


        //新建一个类用于获取item中的控件
public class ViewHolder {
public Button button;
}
        //适配器中定义视图方法
public View getView(int position, View convertView, ViewGroup parent) { // 在这里定义每个item显示的内容
Map thismessage = mData.get(position);//获取该item所要显示数据
ViewHolder viewHolder; 
                //不是第一个item的话就重写item
if (convertView == null) {
viewHolder = new ViewHolder();
                        //获取item.xml文件
                        convertView = LayoutInflater.from(context).inflate(R.layout.activity_dynamic_item, null);
                        //获取item中的控件
viewHolder.button = (Button) convertView.findViewById(R.id.dynamic_item_button1);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
                //在这下面设置控件属性
                viewHolder.button.setText(thismessage.get("content").toString());
viewHolder.button.setOnClickListener(new OnClickListener() { // 按钮点击事件


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
                                System.out.print(thismessage.get("content").toString());
               }
});
return convertView;
}
    }


MainActivity:


    public class DynamicMainActivity extends Activity implements OnItemClickListener, OnScrollListener {
private ListView list;
private criadapter simp_adapter;
private List<HashMap<String, Object>> Data= new ArrayList<HashMap<String, Object>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
getData();
simp_adapter = new criadapter(Data);
list = (ListView) findViewById(R.id.dynamic_listView1);
list.setAdapter(simp_adapter);
list.setOnItemClickListener(this);
list.setOnScrollListener(this);
}
public void getData() {
for(int i=0;i<5;i++){
                    HashMap<String, Object> hashMap = new HashMap<String, Object>();
                    hashMap.put("content", "这是第"+i+"个item");
                    Data.add(hashMap);
                }
}
@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
}


@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// // TODO Auto-generated method st


}
    }
    
activity_main.xml:


    <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="${relativePackage}.${activityClass}" >
    <ListView
        android:id="@+id/dynamic_listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layoutAnimation="@anim/anim_layout" >
    </ListView>
    </RelativeLayout>


item.xml:


    <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="${relativePackage}.${activityClass}"
     android:descendantFocusability="afterDescendants"
     android:focusable="false"  
     android:focusableInTouchMode="true">
         <Button
             android:id="@+id/dynamic_item_button1"
             android:layout_width="45dp"
             android:layout_height="35dp"
             android:background="#28004d"
             android:focusable="true"/>


    </RelativeLayout>


这样重写适配器就好了
注意,要item中的控件可以点击的话,控件父布局要添加


    android:descendantFocusability="afterDescendants"


控件要添加


     android:focusable="true"


这样才能获取焦点
另外要想动态设置item的布局,可以用手写的方式在适配器的getview()中添加控件,参考另一篇博客
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值