2013-06-21 45 views
0

这里是自定义列表视图android系统中使用BaseAdapter其做工精细代码:如何使用BaseAdapter为自定义listview编写onitemClickListener的代码?

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; 


    } 


} 

,并在活动IM结合自定义适配器列表视图:

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

其中“taskclasslistinstance”是我的ArrayList conatining数据从DB其工作正常 现在我需要编写listitemclick功能,以便当用户点击任何listitem我可以得到rowid数据库得到rowwid后。所以我可以删除列表视图,并从数据库中记录和可编辑的信息

+0

要求Google,而不是计算器?你正在寻找“长ID”,或者你可以在getView中设置一个手动的“id”视图setTag(),并通过v.getTag在clicklistener中获取它。 –

回答

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 
    }}); 
+0

yes你的代码工作正常,但即时获取我需要的takclass数据数据库中的行ID我如何得到这个?因为我的任务类没有ID的属性,我可能需要添加id属性在我的任务类im初学者和难以实现这 – nida

+0

是的,我会建议你taskclass保存一个'ID'字段,它是从数据库。您可以在从数据库获取数据并构建“TaskClass”列表时填充它。希望这是有道理的。 –

+0

即时尝试将数据直接放到数据库中的功能,并且该功能存在于我的适配器类im没有使用任务类实例及其设置方法来设置数据库中的值,所以在这个scenerio我如何获得行ID如果我把id属性我的任务类,然后如何获取值? – nida

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。

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; 


    } 
相关问题