您的位置:首页 > 移动开发 > Android开发

Adapter:关于id和position的实验

2018-03-21 10:45 513 查看
结果1:在AdapterView的OnItemClickListener行单击事件中:Position:代表在AdapterView中的行位置(包括header),从0开始,获取数据还是使用parent.getItemAtPosition(position)Id:代表adapter数据源的第几条数据,从0开始,header行的id=-1,所以也可以用list.get(id)或list.remove(id)来操作数据集中的数据 代码:见“附代码1”实验截图:



结果2:在BaseAdapter的getView()中的position代表adapter数据源的第几条数据,从0开始。所以获取数据可以使用list(数据源).get(position);或者使用你覆写的getItem(position)方法代码:见“附代码2”实验截图:


附代码1:public class MainActivity extends Activity {
    public TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView)findViewById(R.id.listView);
        tv = (TextView)findViewById(R.id.tv);
        View layout1 = getLayoutInflater().inflate(R.layout.list_item, null);
        TextView head_tv1 = (TextView)layout1.findViewById(R.id.tv_classifyName);
        head_tv1.setText("header1");
        head_tv1.setTag(-1);
        lv.addHeaderView(layout1);
        View layout2 = getLayoutInflater().inflate(R.layout.list_item, null);
        TextView head_tv2 = (TextView)layout2.findViewById(R.id.tv_classifyName);
        head_tv2.setText("header2");
        head_tv2.setTag(-2);
        lv.addHeaderView(layout2);
        List<Map<String, String>> list = getData();
        SimpleAdapter ada = new SimpleAdapter(this, list, R.layout.list_item,
        new String[]{"title"}, new int[]{R.id.tv_classifyName});
        lv.setA
ac62
dapter(ada);

        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
                // TODO Auto-generated method stub
                if(id == -1) {              
                    String str = "position: " + position + " id: " + id;
                    tv.setText(str);
                } else {
                    String str = "position: " + position + " id: " + id;
                    Map<String, String> map1 = (Map<String, String>)parent.getItemAtPosition(position);
                    str = str + "\ngetItembyPosition: " + map1.get("title");
                    tv.setText(str);
                }
            }
        });
    }

    public ArrayList<Map<String, String>> getData() {
        ArrayList<Map<String, String>> list = new ArrayList<Map<String,String>>();
        for(int i = 0; i < 20; i++) {
            Map<String, String> map = new HashMap<String, String>();
            map.put("title", i + " " + i);
            list.add(map);
        }
    return list;
    }
}
附代码2:MainActivity.java:
public class MainActivity extends Activity {
public static TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView lv = (ListView)findViewById(R.id.listView);
    tv = (TextView)findViewById(R.id.tv);
    View layout1 = getLayoutInflater().inflate(R.layout.list_item, null);
    TextView head_tv1 = (TextView)layout1.findViewById(R.id.tv_classifyName);
    head_tv1.setText("header1");
    head_tv1.setTag(-1);
    lv.addHeaderView(layout1);
    View layout2 = getLayoutInflater().inflate(R.layout.list_item, null);
    TextView head_tv2 = (TextView)layout2.findViewById(R.id.tv_classifyName);
    head_tv2.setText("header2");
    head_tv2.setTag(-2);
    lv.addHeaderView(layout2);
    List<Map<String, String>> list = getData();
    adapter ada = new adapter(this, list);
    lv.setAdapter(ada);
}

    public ArrayList<Map<String, String>> getData() {
        ArrayList<Map<String, String>> list = new ArrayList<Map<String,String>>();
        for(int i = 0; i < 20; i++) {
            Map<String, String> map = new HashMap<String, String>();
            map.put("title", i + " " + i);
            list.add(map);
        }
        return list;
    }
}

Adapter.java:public class adapter extends BaseAdapter {
private Context context;
private LayoutInflater layoutInflater;
private List<Map<String, String>> list;

public adapter(Context context, List<Map<String, String>> list) {
    // 获得LayoutInflater的实例
    this.context = context;
    layoutInflater = LayoutInflater.from(context);
    this.list = list;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size(); // 返回列表长度
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return list.get(arg0);// 返回该位置的Map<>
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public final class ViewHolder {
    public TextView tv;
    public Button btn;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // 设置/获取holder
    ViewHolder holder = null;
    if (convertView == null) {
        // convertView表示某一行的view布局,是已经inflate了的布局
        convertView = layoutInflater.inflate(R.layout.list_item,
        null);

        // 实例化holder中的weight
        holder = new ViewHolder();
        holder.tv = (TextView) convertView.findViewById(R.id.tv_classifyName);
        holder.btn = (Button) convertView.findViewById(R.id.btn);

        // 给convertView绑定一个额外数据,把ViewHolder缓存起来,方便下次可以getTag()获得该view,直接重用
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    // 把holder中的控件与List<>数据源对应起来,即与Map中的key字段对应
    final int p = position;
    holder.tv.setText(list.get(position).get("title"));
    holder.btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String str = "position: " + p + "\nlist.get(p).get('XX'): " + list.get(p).get("title");
            MainActivity.tv.setText(str);
        }
    });
    return convertView;
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android
相关文章推荐