我知道有很多线程或多或少相同的主题,但没有一个涵盖我的情况:
我使用自定义行使用自定义CursorAdapter填充ListView.我有两个ListView状态:第一个状态只包含行中的文本; 第二个状态在每一行都有一个删除按钮.两种状态之间的切换是视图底部的按钮.
我试图实现的是:在第一个状态,当我点击该行时,屏幕应切换到另一个视图.在第二种状态下,当我点击删除按钮时,应该从数据库中删除所选行,应该重新填充ListView,如果我按下除删除按钮以外的行的任何其他部分,则不会发生任何事情.
我知道如何删除一个项目,然后重新填充ListView,当我点击第一个状态的行时,我知道如何切换到另一个视图; 但我无法将两者结合起来.我使用以下方法来获取行的id和位置:
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Code goes in here either for deleting or switching into another view
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用一些if语句来获取单击删除按钮的条件或单击行但它不起作用.
第一个问题很明显:我怎样才能使它发挥作用?
第二个问题是:在第二个状态下,当按下行的任何部分而不是删除按钮屏幕切换到另一个视图.我怎么能阻止这个?我试图将行的.setClickable,.setPressed,.setSelected属性设置为false,但它没有帮助.
感谢您提前回复.
Ren*_*eno 25
在第二状态,当按下行的任何部分而不是删除按钮屏幕切换到另一视图.我怎么能阻止这个?
只需要一个deleteButton的监听器
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = null;
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.one_result_details_row, parent, false);
// inflate other items here :
Button deleteButton = (Button) row.findViewById(R.id.Details_Button01);
deleteButton.setTag(position);
deleteButton.setOnClickListener(
new Button.OnClickListener() {
@Override
public void onClick(View v) {
Integer index = (Integer) view.getTag();
items.remove(index.intValue());
notifyDataSetChanged();
}
}
);
Run Code Online (Sandbox Code Playgroud)
在getView()方法中,将ListItem标记为postion
deleteButton.setTag(position);
Run Code Online (Sandbox Code Playgroud)
将getTag()Object 转换为Integer
在OnClickListener()你然后删除该项目
items.remove(index.intValue());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28350 次 |
| 最近记录: |