Edit item within ListView

1

Hello. I'm working on a code that loads items within ListView through an adapter . Within each item ( item_list.xml ), I inserted two buttons being one to delete the item and another to edit. The method that deletes the item is working perfectly but I am not able to implement the method to edit them. Could someone help me?

Below are the classes that pertain to the use of the information mentioned above:

AdapterListView

package com.example.aulasandroid.aulas_android_listviewactions;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

/**
* Created by lmontanhine on 11/2/2015.
*/
public class AdapterListView extends BaseAdapter {

private LayoutInflater mInflater;
private ArrayList<ItemListView> itens;

public AdapterListView(Context context, ArrayList<ItemListView> itens) {
    //Itens que preencheram o listview
    this.itens = itens;
    //responsavel por pegar o Layout do item.
    mInflater = LayoutInflater.from(context);
}

/**
 * Retorna a quantidade de itens
 *
 * @return
 */
public int getCount() {
    return itens.size();
}

/**
 * Retorna o item de acordo com a posicao dele na tela.
 *
 * @param position
 * @return
 */
public ItemListView getItem(int position) {
    return itens.get(position);
}

/**
 * Sem implementação
 *
 * @param position
 * @return
 */
public long getItemId(int position) {
    return position;
}

public View getView(int position, View view, ViewGroup parent) {
    //Pega o item de acordo com a posção.
    ItemListView item = itens.get(position);
    //infla o layout para podermos preencher os dados
    view = mInflater.inflate(R.layout.item_list, null);

    //atraves do layout pego pelo LayoutInflater, pegamos cada id relacionado
    //ao item e definimos as informações.
    ((TextView) view.findViewById(R.id.text)).setText(item.getTexto());
    ((ImageView) view.findViewById(R.id.imagemview)).setImageResource(item.getIconeRid());
    ((Button) view.findViewById(R.id.btnDelete)).setTag(position);
    ((Button) view.findViewById(R.id.btnEdit)).setTag(item);

    return view;
}
public void removeItem(int positionToRemove){
    itens.remove(positionToRemove);
    notifyDataSetChanged();
}

public void updateItens(ArrayList<ItemListView> itens) {
    self.itens = itens;
    notifyDataSetChanged();
}

}

MainActivity

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;


public class MainActivity extends Activity implements AdapterView.OnItemClickListener {

private ListView listView;
private AdapterListView adapterListView;
private ArrayList<ItemListView> itens;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //carrega o layout onde contem o ListView
    setContentView(R.layout.activity_main);

    //Pega a referencia do ListView
    listView = (ListView) findViewById(R.id.list);
    //Define o Listener quando alguem clicar no item.
    listView.setOnItemClickListener(this);

    createListView();


}

private void createListView() {
    //Criamos nossa lista que preenchera o ListView
    itens = new ArrayList<ItemListView>();
    ItemListView item1 = new ItemListView("Felpudo", R.drawable.felpudo);
    ItemListView item2 = new ItemListView("Felpudão", R.drawable.felpudo1);
    ItemListView item3 = new ItemListView("Felpudinho", R.drawable.felpudo2);

    itens.add(item1);
    itens.add(item2);
    itens.add(item3);

    //Cria o adapter
    adapterListView = new AdapterListView(this, itens);

    //Define o Adapter
    listView.setAdapter(adapterListView);
    //Cor quando a lista é selecionada para ralagem.
    listView.setCacheColorHint(Color.TRANSPARENT);
}

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    //Pega o item que foi selecionado.
    ItemListView item = adapterListView.getItem(arg2);
    //Demostração
    Toast.makeText(this, "Você Clicou em: " + item.getTexto(), Toast.LENGTH_LONG).show();
}

public void deletaItem(View v) {
    adapterListView.removeItem((Integer) v.getTag());
}

public void editaItem(View v){
    onItemClick();
}

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    //Posição na lista
    final int selecionado = arg2;

    //Pega o item que foi selecionado.
    ItemListView item = adapterListView.getItem(arg2);

    final AlertDialog.Builder alert = new AlertDialog.Builder(this);
    final EditText input = new EditText(this);
    input.setText(item.getTexto());
    alert.setView(input);
    alert.setPositiveButton("Alterar", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            String value = input.getText().toString().trim();
            item.setTexto(value);

            itens.set(selecionado, item);

            adapterListView.updateItens(itens);
        }
    });

    alert.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.cancel();
        }
    });

    alert.show();
}

}

ItemListView

package com.example.aulasandroid.aulas_android_listviewactions;

/**
* Created by lmontanhine on 11/2/2015.
*/
public class ItemListView {

private String texto;
private String nome;
private int iconeRid;

public ItemListView() {
}

public ItemListView(String texto, int iconeRid) {
    this.texto = texto;
    this.iconeRid = iconeRid;
}

public int getIconeRid() {
    return iconeRid;
}

public void setIconeRid(int iconeRid) {
    this.iconeRid = iconeRid;
}

public String getTexto() {
    return texto;
}

public void setTexto(String texto) {
    this.texto = texto;
}

public String getNome(String nome) {
    return nome;
}

public void setNome (String nome){
    this.nome = nome;
}

}

item_list.xml (there are button information that makes deleting and editing list items

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="5sp">
    <ImageView
        android:id="@+id/imagemview"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        />
    <Button
        android:id="@+id/btnEdit"
        android:layout_width="80dp"
        android:layout_height="40dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text="Editar"
        android:textColor="#FFFFFF"
        android:onClick="editaItem"/>

    <Button
        android:id="@+id/btnDelete"
        android:layout_width="80dp"
        android:layout_height="40dp"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/btnEdit"
        android:layout_marginTop="3dp"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text="Deletar"
        android:textColor="#FFFFFF"
        android:onClick="deletaItem"/>
    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerVertical="true"
        android:layout_marginLeft="115sp"
        android:gravity="center_vertical"
        android:textColor="#FF000000"
        />

</RelativeLayout>
</RelativeLayout>
    
asked by anonymous 13.02.2015 / 14:24

1 answer

2

I'm assuming you've created an ItemListView class that has some attribute that sets the text of this line in your list, right? Since it does not look like you're persisting this data (such as hard coded ), this would be the simplest solution, unless you need to persist this data somewhere, so the method would be different. >

As it's just a string change, I did not choose an activity to do something very simple, I believe a dialog box will solve this question. So at the click of the button you'll get something like this:

public void editaItem(View v) {
    //Posição na lista
    final int selecionado = (Integer) v.getTag();

    //Pega o item que foi selecionado.
    final ItemListView item = adapterListView.getItem(selecionado);

    final AlertDialog.Builder alert = new AlertDialog.Builder(this);
    final EditText input = new EditText(this);
    input.setText(item.getTexto());
    alert.setView(input);
    alert.setPositiveButton("Alterar", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            String value = input.getText().toString().trim();
            item.setTexto(value);

            itens.set(selecionado, item);

            adapterListView.updateItens(itens);
        }
    });

    alert.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.cancel();
        }
    });

    alert.show();
}

Note that in your adapter I needed to create a updateItens method because you will need to change the items on it again and say that the data has been changed, like this:

public void updateItens(ArrayList<ItemListView> itens) {
    this.itens = itens;
    notifyDataSetChanged();
}

And the button tag, there on your adapter, now needs the position, not the item:

((Button) view.findViewById(R.id.btnEdit)).setTag(position);

It's something like this, see if that's what you're looking for and say.

    
13.02.2015 / 15:03