在一个简单的应用程序中通过我对Java和Android的介绍来跋涉,并遇到了ListView项目选择的问题。对于我的一个活动,我有一个带有两个按钮的布局,其中一个是"删除"按钮,以及"段落的列表视图"这基本上是设备通过传感器时的时间戳。
我已经实现了点击某个项目以进行选择的功能,然后启用"删除"按钮。点击"删除"按钮删除"段落#34;但我仍然选择了一个我不想要的选项。
为了实现选择,我将以下属性添加到ListView:
android:id="@+id/passagesListView"
android:choiceMode="singleChoice"
android:listSelector="#666666"
OnCreate通过OnItemClickListener支持选择:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_passages);
passagesViewAdapter = new PassagesViewAdapter(this, R.layout.passages_row_layout, passages);
final ListView passagesListView = (ListView) findViewById(R.id.passagesListView);
assert passagesListView != null;
final Button deleteButton = (Button) findViewById(R.id.deleteButton);
deleteButton.setEnabled(false);
buildPassageList();
passagesListView.setAdapter(passagesViewAdapter);
passagesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,long arg3) {
Toast.makeText(ViewPassagesActivity.this, "position is " + position,
Toast.LENGTH_LONG).show();
view.setSelected(true);
passagesViewAdapter.notifyDataSetChanged();
selectedItemPos = position;
deleteButton.setEnabled(true);
}
});
}
这部分有效。但是,删除存在一些问题。正如你在评论中看到的那样,我已经尝试了几种我在StackOverflow上找到的方法似乎适用但是,虽然我能够从列表中删除正确的项目,但我仍然在调用之后最终得到一个选定的项目。删除()。
public void delete (View view)
{
final Button deleteButton = (Button) findViewById(R.id.deleteButton);
ListView passagesListView = (ListView) findViewById(R.id.passagesListView);
if(selectedItemPos != -1)
{
Toast.makeText(ViewPassagesActivity.this, "remove " + selectedItemPos,
Toast.LENGTH_LONG).show();
// This did not work, which is strange since it worked similarly for selection when clicked
// View itemView = passagesListView.getChildAt(selectedItemPos);
View itemView = passagesViewAdapter.getView(selectedItemPos, null, passagesListView);
itemView.setSelected(false);
// This was also recommended in various posts on StackOverflow.
// Not clear whether clearChoices applies only to checkBoxes?
// passagesListView.clearChoices();
// passagesListView.requestLayout();
passages.remove(selectedItemPos);
deleteButton.setEnabled(false);
selectedItemPos = -1;
passagesViewAdapter.notifyDataSetChanged();
}}
}
我还遇到了一些问题,试图通过setSelected()和getSelectedItemPosition()跟踪选择哪个项目,并通过自己跟踪索引来进行处理。所以,由于我是新手,我确定有一些我不了解的观点,或者其他一些东西,比如对选择如何运作的误解?
如何清除选择?
谢谢!
答案 0 :(得分:0)
我不知道您的PassagesViewAdapter类是什么样的。也许你可以试试
passagesViewAdapter.remove(passages.get(selectedItemPos));
passages.remove(selectedItemPos);
deleteButton.setEnabled(false);
selectedItemPos = -1;
passagesViewAdapter.notifyDataSetChanged();