我无法使列表项的子项的onClick方法生效。目前,当我长按其中一个列表项时,会出现AppCompatImageView。现在我想为该元素实现onClick方法。目前,单击该按钮/图像会引发异常并导致我的应用崩溃:
java.lang.IllegalStateException: Could not find method deleteCurrentNote()(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageView with id 'listItemDeleteButton'
这是有道理的,因为onClick方法当前在显示列表的活动中实现。在哪里放置我的deleteCurrentNote()方法,这样可以正常工作?
我的一些代码(删节):
list_item_note.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout>
<TextView
android:id="@+id/listItemTitle" />
<TextView
android:id="@+id/listItemTags" />
<android.support.v7.widget.AppCompatImageView
android:id="@+id/listItemDeleteButton"
app:srcCompat="@drawable/delete"
android:onClick="deleteCurrentNote()"
android:visibility="gone" />
</RelativeLayout>
NoteListActivity.java:
ListView listViewNotes = (ListView) findViewById(R.id.listViewNotes);
lazyAdapter = new LazyAdapter(this, notes);
listViewNotes.setAdapter(lazyAdapter);
listViewNotes.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
currentNote = allNotes.get(position);
AppCompatImageView deleteButton = (AppCompatImageView) view.findViewById(R.id.listItemDeleteButton);
deleteButton.setVisibility(View.VISIBLE);
deleteButton.animate().alpha(1.0f).setDuration(5000);
return true;
}
});
...
public void deleteCurrentNote(View view) {
...
}
如果有帮助,我也可以从我的LazyAdapter上传代码。
另外,另一个问题,为什么我的deleteButton上的动画看起来很怪异? http://i.imgur.com/ECMEnvJ.gif
它迅速消失,然后瞬间消失,只是缓慢消失。我怎么能让它慢慢淡入呢?感谢您的时间
答案 0 :(得分:1)
创建你自己的新LazyAdapter
子类。或者,如果您使用自己的LazyAdapter
:
class newClass extends LazyAdapter implements AdapterView.OnItemLongClickListener, AdapterView.OnClickListener {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
currentNote = allNotes.get(position);
AppCompatImageView deleteButton = (AppCompatImageView) view.findViewById(R.id.listItemDeleteButton);
deleteButton.setOnClickListener(this);
deleteButton.setVisibility(View.VISIBLE);
deleteButton.animate().alpha(1.0f).setDuration(5000);
return true;
}
}
@Override
public void onClick(View view) {
deleteCurrentNote();
}
}
您的基本代码中的:
lazyAdapter = new newClass(this, notes);
listViewNotes.setOnItemLongClickListener(lazyAdapter );
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout>
<TextView
android:id="@+id/listItemTitle" />
<TextView
android:id="@+id/listItemTags" />
<android.support.v7.widget.AppCompatImageView
android:id="@+id/listItemDeleteButton"
app:srcCompat="@drawable/delete"
android:visibility="gone" />
</RelativeLayout>
答案 1 :(得分:0)
知道了:
listViewNotes.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
currentNote = allNotes.get(position);
AppCompatImageView deleteButton = (AppCompatImageView) view.findViewById(R.id.listItemDeleteButton);
deleteButton.setOnClickListener(new AdapterView.OnClickListener() {
@Override
public void onClick(View view) {
deleteCurrentNote();
}
});
deleteButton.setVisibility(View.VISIBLE);
deleteButton.animate().alpha(1.0f).setDuration(5000);
return true;
}
});
手动添加onClickListener就可以了。