Android - 删除其他元素

时间:2017-09-01 10:20:50

标签: android listview

我有一个列表视图,其中包含click元素

上的实现
    mProfiles.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            fileName=profileListViewAdapter.getItem(position).getRawName();
            if(!selectionMode) {
                    profileParser.parseProfile(getApplicationContext(), fileName, true);
                profileSelected();
            }
            else {
                if(!selectedProfiles.contains(new SelectedProfilesDataModel(fileName,position))) {
                    selectedProfiles.add(new SelectedProfilesDataModel(fileName,position));
                    ImageView imageView=(ImageView)view.findViewById(R.id.imageViewHouseProfile);
                    imageView.setImageResource(R.drawable.picked);
                }
                else {
                    selectedProfiles.remove(new SelectedProfilesDataModel(fileName,position));
                    ImageView imageView=(ImageView)view.findViewById(R.id.imageViewHouseProfile);
                    imageView.setImageResource(R.mipmap.house_icon);
                }

            }
        }
    });

点击元素后,我将添加到列表并更改列表视图上的图标。

我可以一次选择多个元素。 一切正常,直到我删除了一些元素。

方法代码

@OnClick(R.id.buttonDeleteProfile)
public void deleteProfile(){
    selectionMode =false;
    for(SelectedProfilesDataModel spdm:selectedProfiles) {
        File file = new File(getFilesDir(), spdm.getName());
        profileParser.deleteProfile(file);

    }
        profileListViewAdapter.clear();
        fileProfiles = profileParser.listProfilesFiles(getApplicationContext());
        profileListViewAdapter.setData(fileProfiles);
        profileListViewAdapter.notifyDataSetChanged();
}

该方法是从列表视图中删除元素,但问题是删除的元素(比如说索引2)在索引3下面有元素然后元素删除后会有元素2。第二个元素将另一个图标设置为元素三,但删除后,旧元素三获得&#34;选择图标&#34;旧元素二。

这就是它在实践中的表现。

删除前

enter image description here

删除后

enter image description here

有人知道如何在删除其中一个元素后重置所有其他元素的图像视图吗?

1 个答案:

答案 0 :(得分:0)

由于这个问题我找到了解决方案

How can I update a single row in a ListView?

删除后,我在具有先前删除行索引的位置上手动设置图像。

public void deleteProfile(){
    selectionMode =false;
    for(SelectedProfilesDataModel spdm:selectedProfiles) {
        File file = new File(getFilesDir(), spdm.getName());
        profileParser.deleteProfile(file);

    }
        profileListViewAdapter.clear();
        fileProfiles = profileParser.listProfilesFiles(getApplicationContext());
        profileListViewAdapter.setData(fileProfiles);
    for(SelectedProfilesDataModel spdm:selectedProfiles) {
        updateListView(spdm.getPosition());
    }
        profileListViewAdapter.notifyDataSetChanged();
}

这是我的删除功能

public void updateListView(int index){
    View view = mProfiles.getChildAt(index -
            mProfiles.getFirstVisiblePosition());
    if(view == null)
        return;
    ImageView imageView=(ImageView)view.findViewById(R.id.imageViewHouseProfile);
    imageView.setImageResource(R.mipmap.house_icon);

}

和更改图标的功能。