Autore Topic: EditText ??  (Letto 2760 volte)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
EditText ??
« il: 04 Ottobre 2012, 16:59:01 CEST »
0
Salve ragazzi,
in una listView ho inserito delle editText ma, cliccandoci sopra con il mouse non riesco a modificarne il contenuto e il logCat mi dice:
Codice: [Seleziona]
10-04 14:56:20.767: W/TextView(3732): TextView does not support text selection. Action mode cancelled.

TextView?? Ma nel layout uso una EditText!?

Cosa c'è che non va??

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:EditText ??
« Risposta #1 il: 04 Ottobre 2012, 17:34:09 CEST »
0
Perché EditText IS A TextView

java.lang.Object
   ↳    android.view.View
        ↳    android.widget.TextView
             ↳    android.widget.EditText


Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:EditText ??
« Risposta #2 il: 04 Ottobre 2012, 17:35:37 CEST »
0
ok ok..però non riesco a rendere modificabile le varie EditText contenute nella ListView..
Chi sa aiutarmi??

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:EditText ??
« Risposta #3 il: 04 Ottobre 2012, 17:40:08 CEST »
0
ok ok..però non riesco a rendere modificabile le varie EditText contenute nella ListView..
Chi sa aiutarmi??
Puoi fornire il layout e come carichi la listview?

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:EditText ??
« Risposta #4 il: 04 Ottobre 2012, 17:45:58 CEST »
0
Certamente..
Quersto è il layout della listView (activity_settings.xml)
Codice (XML): [Seleziona]
<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:background="@drawable/background" >

    <ListView
       android:id="@id/android:list"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:layout_centerHorizontal="true"
       android:choiceMode="singleChoice" >

    </ListView>

</RelativeLayout>

Questa è la riga (row_view_settings.xml):
Codice (XML): [Seleziona]
<?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:paddingBottom="10dp"
   android:paddingTop="10dp" >


    <EditText
       android:id="@+id/ed_nameSet"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_centerVertical="true"
       android:layout_marginLeft="10dp"
       android:focusable="false"
       android:inputType="text"
       android:textColor="@android:color/background_light"
       android:width="150dp" />

    <TextView
       android:id="@+id/tv_id"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:visibility="gone" />


    <ImageView
       android:id="@+id/btn_updatePrice"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentRight="true"
       android:layout_centerVertical="true"
       android:focusable="false"
       android:focusableInTouchMode="false"
       android:padding="5dp"
       android:src="@android:drawable/stat_notify_sync" />

    <EditText
       android:id="@+id/ed_priceSet"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:layout_marginLeft="5dp"
       android:layout_toRightOf="@+id/ed_nameSet"
       android:focusable="false"
       android:inputType="number"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:width="75dp" />

</RelativeLayout>

E qui uno snippet del codice:

Codice (Java): [Seleziona]
public class Settings extends ListActivity {
        private ArrayList<HashMap<String,String>> list;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_settings);

                list = new ArrayList<HashMap<String,String>>();
                adapter = new SimpleAdapter(getApplicationContext(),
                                list, R.layout.row_view_settings,
                                new String[] {"id", "nome","prezzo"},
                                new int[]{R.id.tv_id, R.id.ed_nameSet, R.id.ed_priceSet});

                String query = "QUERY TO DB";
                Cursor result = myQuery.rawQuery(query, null);

                while (result.moveToNext()){
                        HashMap<String, String> map = new HashMap<String, String>();

                        map.put(VALORI DAL DB);                
                        list.add(map);
                }

                setListAdapter(adapter);

                mList = getListView(); 
                ....

Funziona nel complesso ma quando clicco sulla editTex non riesco a modificarla..


Offline topix93

  • Utente junior
  • **
  • Post: 84
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus ONE
  • Sistema operativo:
    Windows 7 Professional 64 bit, Ubuntu 11.04
Re:EditText ??
« Risposta #5 il: 04 Ottobre 2012, 17:51:16 CEST »
0
nel layout row_view_settings.xml prova a modificare la editext con questo:
Codice (Java): [Seleziona]
<EditText
       android:id="@+id/ed_priceSet"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:layout_marginLeft="5dp"
       android:layout_toRightOf="@+id/ed_nameSet"
       android:focusable="true"
       android:inputType="number"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:width="75dp" />

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:EditText ??
« Risposta #6 il: 04 Ottobre 2012, 17:55:29 CEST »
0
Si avevo provato..L'editText diventa editabile ma l'imageButton non più..come se andasse in secondo piano..e non posso cliccare il button per aggiornare la grandezza..

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:EditText ??
« Risposta #7 il: 04 Ottobre 2012, 17:56:20 CEST »
0
Giusto nel dubbio...l'hai provata anche sul dispositivo vero?

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:EditText ??
« Risposta #8 il: 04 Ottobre 2012, 18:02:32 CEST »
0
Si si..ma niente...come se fosse disabilitato..ma da codice no..
Se invece rimuovo il focus, diviene cliccabile..

 o_O

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:EditText ??
« Risposta #9 il: 04 Ottobre 2012, 18:32:27 CEST »
0
Non so proprio cm risolvere..

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:EditText ??
« Risposta #10 il: 04 Ottobre 2012, 20:00:20 CEST »
+2
Capito.
In realtà non ti funziona per una serie di errori di comprensione su come funziona la ListView (ho dovuto fare delle prove per coprire che commetto gli stessi errori).

Nel tuo xml originale del layout row_view_settings metti tutto android:focusable="false". Questo istruisce andorid a gestire il click sull'intero item (onItemClickListener sulla ListView). Quando fai click sull'immagine "sembra" che stai cliccando su di lei, ma in realtà stai cliccando sull'intera riga.

Mettendo il campo prezzo android:focusable="true" interrompi questo meccanismo, in quanto essendoci un campo editabile l'evento onItemClickListener viene in un certo senso disabilitato (presumo perché ci si aspetta che lo sviluppatore voglia gestirsi da solo quel che succede sulla riga... ha anche una sua logica col senno di poi); quindi col campo di testo abilitato quando fai click sull'immagine non parte nessun evento e sembra che non funzioni più.

Una soluzione "grezza" al tuo problema può essere crearti un adapter custom dove impostare un listener sui click dell'immagine, e spostare li la logica.

Quindi indicativamente la tua row_view_settings diventa qualcosa del tipo:
Codice (XML): [Seleziona]
<?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:paddingBottom="10dp"
  android:paddingTop="10dp"
  android:background="#000000" >


    <EditText
      android:id="@+id/ed_nameSet"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_centerVertical="true"
      android:layout_marginLeft="10dp"
      android:focusable="false"
      android:inputType="text"
      android:textColor="@android:color/background_light"
      android:width="150dp" />

    <TextView
      android:id="@+id/tv_id"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:visibility="gone" />


    <ImageView
      android:id="@+id/btn_updatePrice"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_centerVertical="true"
      android:focusable="true"
      android:focusableInTouchMode="false"
      android:padding="5dp"
      android:src="@android:drawable/stat_notify_sync" />

    <EditText
      android:id="@+id/ed_priceSet"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerVertical="true"
      android:layout_marginLeft="5dp"
      android:layout_toRightOf="@+id/ed_nameSet"
      android:focusable="true"
      android:inputType="number"
      android:textAppearance="?android:attr/textAppearanceSmall"
      android:width="75dp" />

</RelativeLayout>

E ti fai un tuo adapter per intercettare il click sull'immagine e identificare l'elemento su cui è stato cliccato:
Codice (Java): [Seleziona]
import android.os.Bundle;
import android.app.ListActivity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.*;

public class MainActivity extends ListActivity {
  private ArrayList<HashMap<String, String>> list;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    list = new ArrayList<HashMap<String, String>>();
    // uso il mio adapter custom
    SimpleAdapter adapter =
        new MySimpleAdapter(getApplicationContext(), list, R.layout.row_view_settings, new String[] { "id", "nome", "prezzo" }, new int[] { R.id.tv_id,
            R.id.ed_nameSet, R.id.ed_priceSet });

   // carico con un po' di fuffa
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("id", "1");
    map.put("nome", "Ciccio");
    map.put("prezzo", "10");
    list.add(map);

    map = new HashMap<String, String>();

    map.put("id", "2");
    map.put("nome", "Pippo");
    map.put("prezzo", "20");
    list.add(map);

    setListAdapter(adapter);

  }

  /**
   * Adapter custom
   */

  public class MySimpleAdapter extends SimpleAdapter {
    /**
     * Costruttore di default, identico a SimpleAdapter
     * @param context
     * @param data
     * @param resource
     * @param from
     * @param to
     */

    public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
      super(context, data, resource, from, to);
    }

    /**
     * Gestisco la view tornata dall'adapter al componente ListView
     */

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      // faccio fare il lavoro pesante al parent
      View myView = super.getView(position, convertView, parent);
      // dalla view preparata della riga mi faccio dare l'immagine di update e il campo del prezzo
      ImageView btn = (ImageView) myView.findViewById(R.id.btn_updatePrice);
      TextView priceField = (TextView) myView.findViewById(R.id.ed_priceSet);
      // imposto un listener sul click all'immagine d'update
      btn.setOnClickListener(new MyOnClickListener(position, this, priceField));

      // torno la vista inizializzata
      return myView;
    }
  }

  /**
   * Gestore custom del click sull'immagine di update
   */

  public class MyOnClickListener implements OnClickListener {
    private int           position;
    private SimpleAdapter adapter;
    private TextView      priceField;

    /**
     * Costruttore di default, mi tengo traccia della posizione, dell'adapter e del campo di testo
     * per cui sto preparando l'ascoltatore
     * @param position
     * @param adapter
     * @param priceField
     */

    public MyOnClickListener(int position, SimpleAdapter adapter, TextView priceField) {
      this.position = position;
      this.adapter = adapter;
      this.priceField = priceField;
    }

    /**
     * Gestione del click
     */

    @Override
    public void onClick(View v) {
      // recupero l'item dall'adapter in base alla posizione per cui ho creato questo listener
      Map map = (Map) adapter.getItem(position);
      // recupero il prezzo aggiornato
      String newPrice = "" + priceField.getText();
      // ci faccio cio' che mi serve
      Log.d("click", "click on button position: " + position + " item id: " + map.get("id") + " old price: " + map.get("prezzo") + " new price: " + newPrice);
    }
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
  }
}

Ripeto: è una soluzione grezza nata in 15 minuti, ha sicuramente dei problemi (m'aspetto che dia noie col riciclo delle righe, che l'emulatore di solito non fa ma i dispositivi regolarmente), sicuramente ci sono vie migliori che al momento non mi vengono in mente.
Ma a me vaTM e soprattutto inquadra qual'è il vero problema per partire a sperimentare soluzioni.  :-)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:EditText ??
« Risposta #11 il: 04 Ottobre 2012, 21:47:05 CEST »
0
Tutta questa roba in 15 minuti!?!?

Cmq funge funge!! Altro che!!

 :-o
« Ultima modifica: 04 Ottobre 2012, 21:53:59 CEST da salvatore.zagarella »

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
R: EditText ??
« Risposta #12 il: 04 Ottobre 2012, 22:52:50 CEST »
0
Facciamo 20 va =P

Inviato dal mio XT910 con Tapatalk 2


Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:EditText ??
« Risposta #13 il: 15 Ottobre 2012, 10:55:44 CEST »
0
Ragazzi scusate ho un piccolo problema con la mia listView..Quando ho istallato l'app sul telefono mi sono accorto che, se vado a selezionare l'ultimo elemento della lista, quando vado e modificare il contenuto della edittex il suggerimento T9 va a coprirmi la editText che sto modificando, non vedendola più e non sapendo cosa sto digitando..

Nel manifest ho inserito un "adjustPan" in quanto, al comparire del suggerimento T9, perdevo il focus sulla editText in modifica..il focus non lo perdo ma...non vedo cosa sto digitando..

Un aiutuno??

 O:-)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:EditText ??
« Risposta #14 il: 15 Ottobre 2012, 11:38:38 CEST »
0
Forse uno screen rende meglio...