Java 可展开列表视图组不可单击?
您好,我有一个用于Expandalbe列表视图的自定义适配器,但我无法使其中的项目可单击? 以下是一些片段:Java 可展开列表视图组不可单击?,java,android,listview,expandablelistview,Java,Android,Listview,Expandablelistview,您好,我有一个用于Expandalbe列表视图的自定义适配器,但我无法使其中的项目可单击? 以下是一些片段: 在onCreate()中调用createAdapter() 此外,我还尝试在customAdapter的onCreateGroupView()Methodood()中添加一些代码:(检查“请参见此处”注释) @覆盖 公共视图getGroupView(int i,布尔b,视图视图,视图组视图组){//Group 最终任务myTask=getGroup(i); 最后一个字符串parentCo
在
onCreate()中调用createAdapter()
此外,我还尝试在customAdapter的onCreateGroupView()
Methodood()中添加一些代码:(检查“请参见此处”注释)
@覆盖
公共视图getGroupView(int i,布尔b,视图视图,视图组视图组){//Group
最终任务myTask=getGroup(i);
最后一个字符串parentCode=myTask.getCode();
最终字符串text=myTask.getTaskText();
最终ExpandableListView myExpandableListView=(ExpandableListView)视图组;
如果(视图==null){
LayoutInflater infalInflater=(LayoutInflater)this.context
.getSystemService(上下文布局\充气机\服务);
视图=infalInflater.充气(R.layout.parent_项,视图组,false);
}
//看这里
如果(!view.isClickable()){view.setClickable(true);}//请参见此处!((MainActivity)上下文).createSubTask(parentCode));
如果(!view.isLongClickable()){view.setLongClickable(true);}
view.setOnLongClickListener((viewL2)->{
最终字符序列[]选项对话框={“编辑”,“删除”};
((MainActivity)context.myDialog.setSingleChoiceItems(optionDialog,0,new DialogInterface.OnClickListener()){
@凌驾
公共void onClick(DialogInterface,inti){
如果(i==0){
最终意图myIntent=新意图(上下文、InputActivity.class);
myIntent.putExtra(“请求”,6);
myIntent.putExtra(“oldTask”,myTask.getTaskText());
myIntent.putExtra(“taskCode”,myTask.getCode());
((主要活动)背景)。startActivityForResult(我的意图,6);
dialogInterface.dismise();
}
如果(i==1){
realm.executeTransaction((realm)->myTask.deleteTask());
realm.refresh();
notifyDataSetChanged();
dialogInterface.dismise();
}
}
});
((MainActivity)context.myDialog.show();
返回false;
}
);
返回视图;
}
但是,当我在Emulator中运行它时,这些项目是不可单击的。(仅可长时间单击)可能是因为您没有像对视图所做的那样覆盖myAddSubtaskButton
的onClick()
方法,这是一个单一的抽象方法(也称为Lambda表达式)。您可以看到“->”符号,因此“onClick()”将自动覆盖。不管怎样,我解决了这个问题。事实证明,我不能同时使用“expListView.setOnclickListener()”和“view.setOnLongClickListener()”,可能是因为一个在MainActivity中调用,另一个在Adapter活动中调用。因此,我只是删除了使用“expListView”所做的一切,并将所有“onClickListener”方法都移动到了“GetGroupView”中。现在很有魅力。
private void createAdapter(){
expListView = (ExpandableListView) findViewById(R.id.lv_exp);
final myAdapter listAdapter = new myAdapter(realm, this);
expListView.setClickable(true);
expListView.setOnGroupClickListener((ExpandableListView expandableListView, View view, int i, long l) -> {
final boolean groupExpanded = expandableListView.isGroupExpanded(i);
if(groupExpanded) { expandableListView.collapseGroup(i); }
else { expandableListView.expandGroup(i); }
return false;
});
expListView.setAdapter(listAdapter);
}
@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { //Group
final Task myTask = getGroup(i);
final String parentCode = myTask.getCode();
final String text = myTask.getTaskText();
final ExpandableListView myExpandableListView = (ExpandableListView) viewGroup;
if (view == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = infalInflater.inflate(R.layout.parent_item, viewGroup, false);
}
//SEE HERE
if (!view.isClickable()) { view.setClickable(true);} //SEE HERE!<<
final TextView myTextview = (TextView) view.findViewById(R.id.parent_text_view);
myTextview.setText(text);
final ImageButton myAddSubtaskBtn = (ImageButton) view.findViewById(R.id.button_add_subtask);
myAddSubtaskBtn.setOnClickListener((viewL) -> ((MainActivity) context).createSubTask(parentCode));
if (!view.isLongClickable()){ view.setLongClickable(true); }
view.setOnLongClickListener((viewL2) -> {
final CharSequence[] optionsDialog = {"Edit", "Delete"};
((MainActivity) context).myDialog.setSingleChoiceItems(optionsDialog, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(i==0){
final Intent myIntent = new Intent (context, InputActivity.class);
myIntent.putExtra("request", 6);
myIntent.putExtra("oldTask", myTask.getTaskText());
myIntent.putExtra("taskCode", myTask.getCode());
((MainActivity) context).startActivityForResult(myIntent, 6);
dialogInterface.dismiss();
}
if(i==1){
realm.executeTransaction((realm) -> myTask.deleteTask());
realm.refresh();
notifyDataSetChanged();
dialogInterface.dismiss();
}
}
});
((MainActivity) context).myDialog.show();
return false;
}
);
return view;
}