【问题标题】:Removing Item from list view从列表视图中删除项目
【发布时间】:2016-01-26 22:54:54
【问题描述】:

我有一个包含项目的列表视图,当被选中并按下按钮时,应该将其删除。不确定这些项目是否被选中,因为什么都没有发生。

currentDraft = new Draft();
inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
playerListView = (ListView)this.findViewById(android.R.id.content).getRootView().findViewById(R.id.player_list); 
playerListAdapter = new ArrayAdapter(this,R.layout.player_item,R.id.player_name_txt, new ArrayList<String>(){});

playerListView.setAdapter(playerListAdapter);
playerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) {
            view.setSelected(true);
            playerListView.setSelection(position);
            Log.i("DraftBuddy", "Selected: " + position);
        }
    });

按钮的代码

public void removePlayer(View v)
{
        if(playerListView.getSelectedItem() != null)
        {
            int removeTarget = playerListView.getSelectedItemPosition();
            playerListAdapter.remove(playerListAdapter.getItem(removeTarget));
            playerListAdapter.notifyDataSetChanged();
        }
}

视图代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.mtgdraftbuddy.bryantyoung.draftbuddy2.DraftStart"
    android:clickable="true"
    android:contextClickable="true"
    android:background="#0a0909">

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/player_list"
        tools:listitem="@android:layout/simple_list_item_1"
        android:layout_alignParentTop="true"
        android:layout_above="@+id/add_player_btn"
        android:layout_alignRight="@+id/Startbtn"
        android:layout_alignEnd="@+id/Startbtn"
        android:clickable="true"
        android:contextClickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add Player"
        android:id="@+id/add_player_btn"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:clickable="true"
        android:onClick="addPlayer" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start Draft"
        android:id="@+id/Startbtn"
        android:layout_alignTop="@+id/add_player_btn"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Delete"
        android:id="@+id/removeBtn"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:onClick="removePlayer" />

</RelativeLayout>

日志语句未打印到 logcat,这意味着当用户单击列表视图时无法识别它,它与人们链接的其他解决方案不同。在发布问题之前,我也尝试了解决方案。

【问题讨论】:

  • 不,这不是因为我的日志语句不会显示,这意味着点击未被识别
  • 您是否将R.layout.player_item 中的任何项目定义为可点击?
  • 在你的 relativeLayout 中移除 android:clickable="true"

标签: java android listview listview-selector


【解决方案1】:

您可以尝试通过删除数组中的元素来做同样的事情。

        int removeTarget = playerListView.getSelectedItemPosition();
        playerListView.remove(removeTarget);
        playerListAdapter.notifyDataSetChanged();

希望这会有所帮助!

【讨论】:

    【解决方案2】:
    listView.getItemAtPosition(position)
    

    这会返回List 中的Object,它提供给Adapter

    Adapter 类有一个从提供的listremove()element 的方法

    adapter.remove("here provide the object which you want to remove")
    

    类似的东西

     private int TRACK = 0; // make a variable where you can track which item was clicked in the listview 
    

    在您的listview 中,您必须跟踪点击了哪个项目,TRACK

    playerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) {
                TRACK = position;
                Log.i("DraftBuddy", "Selected: " + position);
            }
        });
    

    这是您可以通过单击按钮调用的代码

    public void removePlayer(View v)
    {
            if(playerListView.getSelectedItem() != null)
            {
    
                 playerListAdapter.remove(playerListView.getItemAtPosition(TRACK));
                 playerListAdapter.notifyDataSetChanged();
            }
    }
    

    更新

    如果我认为您想从单击的列表视图中删除一个项目是正确的。

    如果这种情况你可以像这样得到被点击的项目,

    playerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) {
                  playerListAdapter.remove(playerListView.getItemAtPosition(position));
                  playerListAdapter.notifyDataSetChanged();
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      相关资源
      最近更新 更多