如何使用BaseAdapter为onitemClickListener编写自定义列表视图的代码?

时间:2013-06-21 11:18:36

标签: java android sqlite custom-adapter

这里是自定义列表视图的代码,在Android中使用BaseAdapter工作正常:

public class CustomListAdapter extends BaseAdapter {

    private ArrayList<TaskClass> _listData;
    Context _c;

    public CustomListAdapter(Context context, ArrayList<TaskClass> listData) {

        _listData = listData;
        _c = context;

    }

    @Override
    public int getCount() {
        return _listData.size();
    }

    @Override
    public Object getItem(int position) {
        return _listData.get(position);
    }

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

    public View getView(int position,View convertView,ViewGroup parent) {
        View v = convertView;
        if (v == null) 
        {
            LayoutInflater layoutInflator = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = layoutInflator.inflate(R.layout.listview_row, null);
        }
        TextView titleText = (TextView)v.findViewById(R.id.holdTitleText);
        TextView  catText = (TextView)v.findViewById(R.id.holdCatText);
        TextView  descText = (TextView)v.findViewById(R.id.holdDescText);
        TextView  dateText = (TextView)v.findViewById(R.id.holdDateText);
        //CheckBox checkBoxForEachItem = (CheckBox)v.findViewById(R.id.)
        TaskClass taskClassInstance = _listData.get(position);
        titleText.setText(taskClassInstance.getTitle());
        catText.setText(taskClassInstance.getTaskCategory());
        descText.setText(taskClassInstance.getDescription());
        dateText.setText(taskClassInstance.getTaskDate());
        return v;


    }


}

并在活动中使用自定义适配器绑定listview:

listViewInstance.setAdapter(new CustomListAdapter(getApplicationContext(),taskClasslistInstance));

其中“taskclasslistinstance”是我的arraylist从数据库中收集数据工作正常 现在我需要为listitemclick编写函数,以便当用户点击任何listitem时,我可以从数据库 .so获得该列表项目记录的 rowid 。在获取rowwid之后,我可以从中删除记录listview和db,可以编辑信息

3 个答案:

答案 0 :(得分:1)

好吧,我们不知道你的TaskClass,但我希望你想要这样的事情:

listViewInstance.setOnItemClickListener(new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
        TaskClass taskClass = taskClasslistInstance.get(pos);
        Log.d(TAG, "Clicked on: " + taskClass)
        // Do stuff with taskClass
    }});

答案 1 :(得分:0)

这是我项目的一个小例子:

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

    adapter = new LazyAdapterAlbum(getActivity(), songs);
    list.setAdapter(adapter);

    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i = new Intent(getActivity(), AlbumActivity.class);
            Bundle args = new Bundle();
            args.putString(AlbumActivity.ALBUM_NAME, adapter.getItem(position).getName());
            i.putExtras(args);
            startActivity(i);
        }
    });

您必须在ListView上设置onClickListener。

答案 2 :(得分:0)

你也可以在下面的getView方法中设置:

public View getView(int position,View convertView,ViewGroup parent) {
        View v = convertView;
        if (v == null) 
        {
            LayoutInflater layoutInflator = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = layoutInflator.inflate(R.layout.listview_row, null);
        }
        TextView titleText = (TextView)v.findViewById(R.id.holdTitleText);
        TextView  catText = (TextView)v.findViewById(R.id.holdCatText);
        TextView  descText = (TextView)v.findViewById(R.id.holdDescText);
        TextView  dateText = (TextView)v.findViewById(R.id.holdDateText);
        //CheckBox checkBoxForEachItem = (CheckBox)v.findViewById(R.id.)
        TaskClass taskClassInstance = _listData.get(position);
        titleText.setText(taskClassInstance.getTitle());
        catText.setText(taskClassInstance.getTaskCategory());
        descText.setText(taskClassInstance.getDescription());
        dateText.setText(taskClassInstance.getTaskDate());

       v.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            //Perform an action when this list item is clicked
        }
    });
        return v;


    }