Android onItemClick不';t使用适配器(线性布局)
我有我的自定义适配器: allergy2_row.xmlAndroid 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
<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;
}