0

I have a list view with items, that when selected and when a button is pressed, should be deleted. Not sure if the items are being selected at all because nothing is happening.

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);
        }
    });

The Code for the button

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

The code for the view:

<?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>

the log statement is not being printed out to logcat which means it is not being recognized when the user clicks on the list view it is different from the other solutions people have linked. I also tried the solutions before posting the problem.

Bryant
  • 59
  • 10
  • Possible duplicate of [Android - setSelected in OnItemClick in ListView](http://stackoverflow.com/questions/4800415/android-setselected-in-onitemclick-in-listview) – tynn Jan 26 '16 at 23:16
  • no it is not because my log statement will not show up which means the click is not being recognized – Bryant Jan 26 '16 at 23:44
  • Did you define any item in `R.layout.player_item` as clickable? – tynn Jan 27 '16 at 00:28
  • remove android:clickable="true" in your relativeLayout – ThaiPD Jan 27 '16 at 03:18

2 Answers2

0

You can try doing the same thing by instead removing the element in the array.

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

Hope this helps!

drew
  • 319
  • 1
  • 2
  • 12
0
listView.getItemAtPosition(position)

This return the Object in the List which is provided to the Adapter,

Adapter class has a method to remove() a element from the provided list

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

something like this

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

in your listview you have to keep track of which item was clicked, 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);
        }
    });

this is code which you can use to call from the button click

public void removePlayer(View v)
{
        if(playerListView.getSelectedItem() != null)
        {

             playerListAdapter.remove(playerListView.getItemAtPosition(TRACK));
             playerListAdapter.notifyDataSetChanged();
        }
}

Update

if I believe right that you want to remove the an item from the Listview which one is clicked.

if this case you can get the item which is been clicked like this,

playerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) {
              playerListAdapter.remove(playerListView.getItemAtPosition(position));
              playerListAdapter.notifyDataSetChanged();
        }
    });
Pankaj Nimgade
  • 4,529
  • 3
  • 20
  • 30