【Android】listView动态处理item
主界面有listView ,id是List_main,adapter是直接new出来的
-----------------------我是分割线---------------------------------
由于listview在中间,我想让三个item占满他,而listview的大小也是根据屏幕分辨率调的,我的办法是用inflate拿到adapter布局里面的高,然后用getLayoutParams().height=XX来改,后来我发现,值拿到了,也改了,log出来的值也是改过的值,但是界面上的高就是没变。
后来在某大神的博客找到方法
adapter这个类每在新建item的时候都会调用一次getView方法,我写了一个adapter继承自SimpleAdapter,然后再new我的这个adapter,在参数里面加一个值,给getview用
代码如下
adapter
package com.example.android_class; import java.util.List; import java.util.Map; import com.example.android_class.MainActivity; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.SimpleAdapter; public class MyAdapter extends SimpleAdapter { int myh; public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to,int myh) { super(context, data, resource, from, to); this.myh=myh; } public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); v.getLayoutParams().height=myh; return v; } }
activity
private void init_setAdapter() { List<Map<String, Object>> l = new ArrayList<Map<String, Object>>(); Map<String, Object> m = new HashMap<String, Object>(); m.put("main_adapter_img", R.drawable.week); m.put("main_adapter_textView", "本周数据"); l.add(m); m = new HashMap<String, Object>(); m.put("main_adapter_img", R.drawable.month); m.put("main_adapter_textView", "本月数据"); l.add(m); m = new HashMap<String, Object>(); m.put("main_adapter_img", R.drawable.year); m.put("main_adapter_textView", "本年数据"); l.add(m); MyAdapter s = new MyAdapter(this,l,R.layout.activity_main_adapter,new String[]{"main_adapter_img","main_adapter_textView"},new int[]{R.id.main_adapter_img,R.id.main_adapter_textView},list_main.getLayoutParams().height/3); list_main.setAdapter(s); }
还有一个问题就是像素和dp的转换问题,以后再说。
禁止转载
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。