Android onItemClick不';t使用适配器(线性布局)

Android onItemClick不';t使用适配器(线性布局),android,xml,android-layout,Android,Xml,Android Layout,我有我的自定义适配器: allergy2_row.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:layout_g

我有我的自定义适配器:

allergy2_row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_gravity="center_vertical">

        <LinearLayout
        android:layout_width="320dp"
        android:layout_height="100dp"
        android:orientation="vertical"
        >
        <TextView
        android:id="@+id/task_item_name"
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
            />

        <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/task_subitem_name"
        android:textSize="15dp"
            />



    </LinearLayout>

<CheckBox
android:id="@+id/task_item_done"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>

我需要创建适配器,以便如下所示:

我尝试了不同的布局-2线性布局,相对布局,约束布局。但它们是不可点击的。(当只有一个线性布局(带有文本视图和复选框)时,效果很好。) 因此,当我在内部添加另一个线性布局时,单击开始不起作用

Allergy2.java

public class Allergy2 extends AppCompatActivity {
    private Realm realm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_allergy2);
        realm = Realm.getDefaultInstance();
        RealmResults<Allergy2Task> tasks = realm.where(Allergy2Task.class).findAll();
        tasks = tasks.sort("timestamp");
        final Allergy2Adapter adapter = new Allergy2Adapter(this, tasks);

        ListView listView = (ListView) findViewById(R.id.task_list);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Context context = view.getContext();
                LinearLayout layout = new LinearLayout(context);
                layout.setOrientation(LinearLayout.VERTICAL);


                final Allergy2Task task = (Allergy2Task) adapterView.getAdapter().getItem(i);
                final EditText taskEditText = new EditText(Allergy2.this);
                final EditText task2EditText = new EditText(Allergy2.this);
                taskEditText.setSingleLine(true);
                taskEditText.setHint("Type ingredient");
                taskEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

                task2EditText.setSingleLine(true);
                task2EditText.setHint("Type synonyms(if any) separated by commas");
                task2EditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

                layout.addView(taskEditText);
                layout.addView(task2EditText);

                AlertDialog dialog = new AlertDialog.Builder(Allergy2.this)
                        .setTitle("Edit allergen")
                        .setView(layout)
                        .setPositiveButton("Save", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                String ed_text = taskEditText.getText().toString().trim();
                                if (ed_text.isEmpty()) {
                                    Toast toast = Toast.makeText(getApplicationContext(),
                                            "The field cannot be empty", Toast.LENGTH_SHORT);
                                    toast.show();

                                } else {
                                    changeTaskName(task.getId(), String.valueOf(taskEditText.getText()));
                                }
                            }
                        })
                        .setNegativeButton("Delete", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                deleteTask(task.getId());
                            }
                        })
                        .create();
                dialog.show();
            }
        });
}
公共类Allergy2扩展了AppCompative活动{
私人领域;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
realm=realm.getDefaultInstance();
RealmResults tasks=realm.where(Allergy2Task.class).findAll();
tasks=tasks.sort(“时间戳”);
最终Allergy2Adapter=新的Allergy2Adapter(此,任务);
ListView ListView=(ListView)findViewById(R.id.task_list);
setAdapter(适配器);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
Context=view.getContext();
LinearLayout布局=新的LinearLayout(上下文);
布局。设置方向(线性布局。垂直);
最终Allergy2Task任务=(Allergy2Task)adapterView.getAdapter().getItem(i);
最终编辑文本任务编辑文本=新编辑文本(Allergy2.this);
最终编辑文本任务2编辑文本=新编辑文本(Allergy2.this);
taskEditText.setSingleLine(真);
setHint(“类型成分”);
taskEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_句);
task2EditText.setSingleLine(真);
task2EditText.setHint(“键入同义词(如果有),用逗号分隔”);
Task2Edit TEXT.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_句子);
layout.addView(taskEditText);
layout.addView(task2EditText);
AlertDialog=新建AlertDialog.Builder(Allergy2.this)
.setTitle(“编辑过敏原”)
.setView(布局)
.setPositiveButton(“保存”,新建DialogInterface.OnClickListener()){
@凌驾
公共void onClick(DialogInterface,inti){
字符串ed_text=taskEditText.getText().toString().trim();
if(ed_text.isEmpty()){
Toast Toast=Toast.makeText(getApplicationContext(),
“字段不能为空”,Toast.LENGTH\u SHORT);
toast.show();
}否则{
changeTaskName(task.getId(),String.valueOf(taskEditText.getText());
}
}
})
.setNegativeButton(“删除”,新建DialogInterface.OnClickListener(){
@凌驾
公共void onClick(DialogInterface,inti){
deleteTask(task.getId());
}
})
.create();
dialog.show();
}
});
}
这是该类的适配器: Allergy2Adapter.java

public class Allergy2Adapter extends RealmBaseAdapter<Allergy2Task> implements ListAdapter {

    private Allergy2 activity;
    private Realm realm;

    private static class ViewHolder {
        TextView taskName;
        CheckBox isTaskDone;
    }

    Allergy2Adapter(Allergy2 activity, OrderedRealmCollection<Allergy2Task> data) {
        super(data);
        this.activity = activity;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.allergy2_row, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.taskName = (TextView) convertView.findViewById(R.id.task_item_name);
            viewHolder.isTaskDone = (CheckBox) convertView.findViewById(R.id.task_item_done);
            viewHolder.isTaskDone.setOnClickListener(listener);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        if (adapterData != null) {
            Allergy2Task task = adapterData.get(position);
            viewHolder.taskName.setText(task.getName());
            viewHolder.isTaskDone.setChecked(task.isDone());
            viewHolder.isTaskDone.setTag(position);
        }


        return convertView;
    }

    private View.OnClickListener listener = new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            int position = (Integer) view.getTag();
            if (adapterData != null) {
                Allergy2Task task = adapterData.get(position);
                activity.changeTaskDone(task.getId());
            }

        }

    };



}
公共类Allergy2Adapter扩展RealmBaseAdapter实现ListAdapter{
私人过敏症2活动;
私人领域;
私有静态类视图持有者{
TextView任务名;
检查是否已完成;
}
Allergy2Adapter(Allergy2活动、OrderedRealmCollection数据){
超级(数据);
这个。活动=活动;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
convertView=LayoutInflater.from(parent.getContext())
.充气(R.layout.allergy2_行,父级,假);
viewHolder=新的viewHolder();
viewHolder.taskName=(TextView)convertView.findViewById(R.id.task\u item\u name);
viewHolder.isTaskDone=(复选框)convertView.findViewById(R.id.task\u item\u done);
viewHolder.isTaskDone.setOnClickListener(listener);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
如果(adapterData!=null){
Allergy2Task任务=adapterData.get(位置);
viewHolder.taskName.setText(task.getName());
viewHolder.isTaskDone.setChecked(task.isDone());
viewHolder.isTaskDone.setTag(位置);
}
返回视图;
}
private View.OnClickListener=new View.OnClickListener(){
@凌驾
公共void onClick(视图){
int position=(整数)view.getTag();
如果(adapterData!=null){
Allergy2Task任务=adapterData.get(位置);
activity.changeTaskDone(task.getId());
}
}
};
}
试试这个

   @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.allergy2_row, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.taskName = (TextView) convertView.findViewById(R.id.task_item_name);
            viewHolder.isTaskDone = (CheckBox) convertView.findViewById(R.id.task_item_done);
            viewHolder.isTaskDone.setOnClickListener(listener);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        if (adapterData != null) {
            Allergy2Task task = adapterData.get(position);
            viewHolder.taskName.setText(task.getName());
            viewHolder.isTaskDone.setChecked(task.isDone());
            viewHolder.isTaskDone.setTag(position);
        }
             converView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

            if (adapterData != null) {
                Allergy2Task task = adapterData.get(position);
                activity.changeTaskDone(task.getId());
            } 
                }
            });

        return convertView;
    }