Android ListView确定文本或选中标记单击
标题已经说明了这一点。Android ListView确定文本或选中标记单击,android,listview,checkbox,checkedtextview,Android,Listview,Checkbox,Checkedtextview,标题已经说明了这一点。 我有一个带有自定义适配器的listview,这些行只包含一个TextView和一个复选框。 我需要确定用户是点击复选标记还是点击文本,这样我就可以显示一个描述对话框来解释他要勾选什么 在我的适配器中,我设置OnClickListener,如下所示: @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView;
我有一个带有自定义适配器的listview,这些行只包含一个TextView和一个复选框。
我需要确定用户是点击复选标记还是点击文本,这样我就可以显示一个描述对话框来解释他要勾选什么 在我的适配器中,我设置OnClickListener,如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row==null){
LayoutInflater inflater=getLayoutInflater();
row=inflater.inflate(R.layout.entsorgung_list_item, parent, false);
}
// CheckedTextView checkedTextView = (CheckedTextView)row.findViewById(R.id.ctvEntsorgung);
// checkedTextView.setText(bedarfsList.get(position));
TextView itemText = (TextView)row.findViewById(R.id.tvEntdorgItem);
CheckBox itemCheck = (CheckBox)row.findViewById(R.id.cbEntsorgItem);
itemCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("TRACE","check click pos ");
// here i need the ListView position thats been clicked
}
});
itemText.setText(bedarfsList.get(position));
Boolean checked = myChecked.get(position);
if (checked != null) {
itemCheck.setChecked(checked);
}
return row;
}
该复选框的可聚焦设置为false。在我的活动中,我有一个用于文本单击的OnItemClickListener,我只需要在复选框中使用它。但是您已经从
getView
方法收到了复选框的位置,所以请使用:
position
发件人:
public View getView(int位置、视图转换视图、视图组父视图)
像这样:
itemCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("TRACE","check click pos ");
Boolean checked = myChecked.get(position);
}
});
编辑:查看我用于非常类似情况的以下适配器:
private class MySecondAdapter extends ArrayAdapter<MiniTask>
{
private ArrayList<MiniTask> list;
public MySecondAdapter(Context context, int textViewResourceId, ArrayList<MiniTask> miniTaskList)
{
super(context, textViewResourceId, miniTaskList);
this.list = new ArrayList<MiniTask>();
this.list.addAll(miniTaskList);
}
public View getView(final int position, View convertView, ViewGroup parent)
{
miniTask = miniTaskList.get(position);
ViewHolder holder = new ViewHolder();
{
LayoutInflater inflator = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflator.inflate(R.layout.check_list_item_new, null);
holder.title = (TextView) convertView.findViewById(R.id.tvItemTitle);
holder.commentsPicturesButton = (ImageView) convertView.findViewById(R.id.iAddCommetOrPicture);
holder.commentsPicturesButton.setTag(position);
holder.commentsPicturesButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = new Intent(getApplicationContext(), PicturesAndCommentsActivity.class);
intent.putExtra(TasksListActivity.KEY_ID, task.getId());
intent.putExtra("mini_task_text", miniTask.getTitle());
startActivity(intent);
}
});
holder.selected = (CheckBox) convertView.findViewById(R.id.cbCheckListItem);
holder.selected.setTag(position);
holder.selected.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
{
Log.d(TAG, "pressed the checkbox: " + v.getId() + " in position: " + position + " tag: " +v.getTag() +" and item from array: " + miniTaskList.get(position) );
CheckBox checkbox = (CheckBox) v;
miniTaskList.get(position).setSelected(checkbox.isChecked());
numOfCheckedMiniTasks = 0;
for(int i=0;i<miniTaskList.size();i++)
{
miniTask = miniTaskList.get(i);
if(miniTask.isSelected())
{
numOfCheckedMiniTasks ++;
}
}
int percent = (int)(numOfCheckedMiniTasks * 100.0f) / miniTaskList.size();
Log.d(TAG, "the percentage is: " +percent);
tasksRepository.get(tasksRepository.indexOf(task)).setMiniTasksPercentageComplete(percent);
}
}
});
}
holder.title.setText(miniTask.getTitle());
holder.selected.setChecked(miniTask.isSelected());
return convertView;
}
}
static class ViewHolder
{
TextView title;
CheckBox selected;
ImageView commentsPicturesButton;
}
私有类MySecondAdapter扩展了ArrayAdapter
{
私有数组列表;
public MySecondAdapter(上下文上下文、int textViewResourceId、ArrayList微任务列表)
{
超级(上下文、textViewResourceId、迷你任务列表);
this.list=new ArrayList();
this.list.addAll(迷你任务列表);
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
迷你任务=迷你任务列表。获取(位置);
ViewHolder=新的ViewHolder();
{
LayoutFlater充气器=(LayoutFlater)getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.check\u list\u item\u new,null);
holder.title=(TextView)convertView.findViewById(R.id.tvItemTitle);
holder.commentsPictureButton=(ImageView)convertView.findViewById(R.id.iaddCommentorPicture);
holder.CommentSpictureButton.setTag(位置);
holder.CommentSpictureButton.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v)
{
Intent Intent=新的Intent(getApplicationContext(),PicturesAndCommentsActivity.class);
intent.putExtra(taskslistativity.KEY_ID,task.getId());
intent.putExtra(“mini_task_text”,minitash.getTitle());
星触觉(意向);
}
});
holder.selected=(复选框)convertView.findViewById(R.id.cbCheckListItem);
保持架.选定.设置标签(位置);
holder.selected.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v)
{
{
Log.d(TAG),在位置“+position+”中按下复选框“+v.getId()+”,标记“+v.getTag()+”和数组中的项“+ministasklist.get(position));
复选框=(复选框)v;
ministasklist.get(position).setSelected(checkbox.isChecked());
numOfcheckedMinistasks=0;
对于(int i=0;iI显然是先尝试的,但它说“变量position
是从whithin innner类访问的”我添加了一个ArrayAdapter的代码片段,用于与您的视图非常相似的视图,请仔细查看。也许您会发现自己做错了什么。thx。我刚刚在getView中做了最后一个int,并给了它一个位置。我可以在ClickListener中使用它!效果很好!有时,由于ArrayAdapter的方式,位置会混淆使用项目行视图。