Autore Topic: Lettura EditText dentro un popup  (Letto 459 volte)

Offline roby492

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Windows 7
Lettura EditText dentro un popup
« il: 22 Novembre 2013, 09:43:00 CET »
0
Ciao a tutti ragazzi,

E' da giorni che non riesco a risolvere questo annoso problema. In pratica ho un'activity contenente una listView, un bottone su cui clicco per aprire un popup (che richiama un layout xml) e dentro quest'ultimo una editText per inserire il nome. Vorrei che poi cliccando sul bottone del popup il nome venga preso ed inserito in listview, ma l'app crasha presumibilmente nella lettura da EditText. Ora vi posto tutto il codice


Codice (Java): [Seleziona]
public class FirstActivity extends Activity{
        private RelativeLayout layout;
        private DrawView drawView;
        private Intent myIntent;
        private ImageButton start,addPlayer,gender;
        private static int width;
        private static int height;
        private int nPlayer;
        private Point p;
        private ImageView bottleone;
        private ListView mainListView;
        private ArrayAdapter listAdapter;
        private ArrayList listaAutori;
       
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_first);
                layout = (RelativeLayout)findViewById(R.id.first);
                width = getWindow().getWindowManager().getDefaultDisplay().getWidth();         
                height = getWindow().getWindowManager().getDefaultDisplay().getHeight();               
                addPlayer=(ImageButton)findViewById(R.id.addPlayer);           
                mainListView = (ListView) findViewById(R.id.listView);
                String[] autori = new String[] { "Emanuele Cisotti", "Nicola Ligas", "Francesco Fumelli" };
                listaAutori = new ArrayList();
                listaAutori.addAll(Arrays.asList(autori));
                listAdapter = new ArrayAdapter(this, R.layout.row, listaAutori);
                mainListView.setAdapter(listAdapter);                  
                addPlayer.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                if (p !=null)
                                showPopup(FirstActivity.this, p);
                        }
                });
        }
       
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
            int[] location = new int[2];
            ImageButton addPlayer = (ImageButton) findViewById(R.id.addPlayer);
            addPlayer.getLocationOnScreen(location);
            // Initialize the Point with x, and y positions
            p = new Point();
            p.x = location[0];
            p.y = location[1];

    }
 // The method that displays the popup.
    private void showPopup(final Activity context, Point p) {
                 Rect rectgle= new Rect();
                 Window window= getWindow();
                 window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
                 int StatusBarHeight= rectgle.top;
                 int contentViewTop=
                     window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
                 int TitleBarHeight= contentViewTop - StatusBarHeight;
                 Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
                 int popupWidth = display.getWidth();
                 int popupHeight = (display.getHeight()-StatusBarHeight);
                 final EditText nuovoNome;
                 nuovoNome = (EditText) findViewById(R.id.editText11);
            // Inflate the popup_layout.xml
            RelativeLayout viewGroup = (RelativeLayout) context.findViewById(R.id.popupLayout);
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);                    
            View layout = layoutInflater.inflate(R.layout.activity_popup, viewGroup);
            // Creating the PopupWindow
            final PopupWindow popup = new PopupWindow(context);
            popup.setContentView(layout);
            popup.setWidth(popupWidth);
            popup.setHeight(popupHeight);
            popup.setFocusable(true);
            popup.setAnimationStyle(R.style.PopupWindowAnimation);
            // Some offset to align the popup a bit to the right, and a bit down,
            // relative to button's position.
            int OFFSET_X = 0;
            int OFFSET_Y = 0;
            // Clear the default translucent background
            popup.setBackgroundDrawable(new BitmapDrawable());
            // Displaying the popup at the specified location, + offsets.
            popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y + OFFSET_Y);
                       
            // Getting a reference to Close button, and close the popup when
            // clicked.
            Button close = (Button) layout.findViewById(R.id.close);
            close.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                                String nuovoAutore = nuovoNome.getText().toString();
                                        listAdapter.add(nuovoAutore);                          
                                        nuovoNome.setText(""); //Azzero nome
                            popup.dismiss();
                    }
            });
      }
               
}//end class

XML DEL LAYOUT DI PARTENZA
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/bg"
   android:id="@+id/first"
   tools:context=".FirstActivity" >
   
        <ListView
           android:id="@+id/listView"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_weight="7" >

    </ListView>
   
   <ImageButton
      android:id="@+id/addPlayer"
      android:layout_width="96dip"
      android:layout_height="96dip"
      android:layout_alignParentBottom="true"
      android:layout_alignParentRight="true"
      android:layout_marginBottom="58dp"
      android:layout_marginRight="58dp"
      android:background="#07000000"
      android:src="@drawable/buttonmetal" />  
    </RelativeLayout>


XML DEL LAYOUT DEL POPUP
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/popupLayout"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="@color/colorPopUp"
   android:gravity="center"
   android:orientation="vertical"
    >

    <RelativeLayout
       android:id="@+id/relativeLayout1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:background="@color/colorPopUpMarcoWindow"
       android:gravity="center"
       android:orientation="vertical" >

   

    <EditText
       android:id="@+id/editText11"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:ems="20"        
       android:hint="Nome">
        <requestFocus />
        </EditText>

    <Button
       android:id="@+id/close"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_below="@id/delete"
       android:layout_marginTop="36dp"
       android:text="Ok" />        
       
        <RelativeLayout
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_marginBottom="5dp"
           android:layout_marginLeft="5dp"
           android:layout_marginRight="5dp"
           android:layout_marginTop="5dp"
           android:background="@color/colorPopUpWindow"
           android:gravity="center"
           android:orientation="vertical" >
           
        </RelativeLayout>

    </RelativeLayout>


</RelativeLayout>

Ho fatto una screenshot del logcat che potete trovare qui: https://www.dropbox.com/s/taxqh8f2p3fuk9h/ERROR.GIF
L'app si blocca appena premo l'ok per chiudere il popup e quindi appena tenta di leggere la editText.

Vi ringrazio veramente di cuore per l'aiuto che sono certo mi darete e per tutti i fantastici i tutorial del sito.



Roberto

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Lettura EditText dentro un popup
« Risposta #1 il: 22 Novembre 2013, 10:22:21 CET »
0
Ho fatto una screenshot del logcat che potete trovare qui: https://www.dropbox.com/s/taxqh8f2p3fuk9h/ERROR.GIF

meglio se fai copia-e-incolla del testo del logcat direttamente nel messaggio, perchè per esempio da dove sono non posso aprire dropbox.com
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline roby492

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Windows 7
Re:Lettura EditText dentro un popup
« Risposta #2 il: 22 Novembre 2013, 10:33:56 CET »
0
Scusami allora lo posto qui. Ecco il mio bel Logcat :-)

Codice: [Seleziona]
11-22 10:31:16.789: D/dalvikvm(1126): Late-enabling CheckJNI
11-22 10:31:17.169: D/libEGL(1126): loaded /system/lib/egl/libEGL_mali.so
11-22 10:31:17.174: D/libEGL(1126): loaded /system/lib/egl/libGLESv1_CM_mali.so
11-22 10:31:17.179: D/libEGL(1126): loaded /system/lib/egl/libGLESv2_mali.so
11-22 10:31:17.189: E/(1126): Device driver API match
11-22 10:31:17.189: E/(1126): Device driver API version: 17
11-22 10:31:17.189: E/(1126): User space API version: 17
11-22 10:31:17.189: E/(1126): mali: REVISION=Linux-r3p1-01rel1 BUILD_DATE=Tue Jul  2 15:06:24 KST 2013
11-22 10:31:17.239: D/OpenGLRenderer(1126): Enabling debug mode 0
11-22 10:32:05.279: D/AndroidRuntime(1964): Shutting down VM
11-22 10:32:05.279: W/dalvikvm(1964): threadid=1: thread exiting with uncaught exception (group=0x417d57c0)
11-22 10:32:05.289: E/AndroidRuntime(1964): FATAL EXCEPTION: main
11-22 10:32:05.289: E/AndroidRuntime(1964): java.lang.NullPointerException
11-22 10:32:05.289: E/AndroidRuntime(1964):         at com.example.spinthebottle.FirstActivity$4.onClick(FirstActivity.java:174)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at android.view.View.performClick(View.java:4247)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at android.view.View$PerformClick.run(View.java:17728)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at android.os.Handler.handleCallback(Handler.java:730)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at android.os.Handler.dispatchMessage(Handler.java:92)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at android.os.Looper.loop(Looper.java:137)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at android.app.ActivityThread.main(ActivityThread.java:5289)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at java.lang.reflect.Method.invokeNative(Native Method)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at java.lang.reflect.Method.invoke(Method.java:525)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
11-22 10:32:05.289: E/AndroidRuntime(1964):         at dalvik.system.NativeStart.main(Native Method)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Lettura EditText dentro un popup
« Risposta #3 il: 22 Novembre 2013, 10:54:35 CET »
0
Citazione
11-22 10:32:05.289: E/AndroidRuntime(1964): java.lang.NullPointerException
11-22 10:32:05.289: E/AndroidRuntime(1964):         at com.example.spinthebottle.FirstActivity$4.onClick(FirstActivity.java:174)

Alla riga 174 di FirstActivity.java hai qualcosa che è NULL e non dovrebbe esserlo.

Identifica la riga e subito prima metti un Log.d() per monitorare lo stato degli oggetti che nella riga successiva potrebbero essere NULL.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline roby492

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Windows 7
Re:Lettura EditText dentro un popup
« Risposta #4 il: 22 Novembre 2013, 11:15:18 CET »
0
Il problema è qui, come ti dicevo non riesce a prendere il testo dalla editText.

Button close = (Button) layout.findViewById(R.id.close);
            close.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                          Log.d("OnClick","OnClick chiusura Popup");
                          String nuovoAutore = nuovoNome.getText().toString();  <-- NON RIESCO A LEGGERE NUOVONOME
                         listAdapter.add(nuovoAutore);                          
                         nuovoNome.setText("");
                            popup.dismiss();
                    }
            });


Codice: [Seleziona]
11-22 11:11:53.150: D/libEGL(6339): loaded /system/lib/egl/libEGL_mali.so
11-22 11:11:53.155: D/libEGL(6339): loaded /system/lib/egl/libGLESv1_CM_mali.so
11-22 11:11:53.160: D/libEGL(6339): loaded /system/lib/egl/libGLESv2_mali.so
11-22 11:11:53.160: E/(6339): Device driver API match
11-22 11:11:53.160: E/(6339): Device driver API version: 17
11-22 11:11:53.160: E/(6339): User space API version: 17
11-22 11:11:53.160: E/(6339): mali: REVISION=Linux-r3p1-01rel1 BUILD_DATE=Tue Jul  2 15:06:24 KST 2013
11-22 11:11:53.190: D/OpenGLRenderer(6339): Enabling debug mode 0
11-22 11:12:03.530: D/OnClick(6339): OnClick chiusura Popup
11-22 11:12:03.530: D/AndroidRuntime(6339): Shutting down VM
11-22 11:12:03.530: W/dalvikvm(6339): threadid=1: thread exiting with uncaught exception (group=0x417d57c0)
11-22 11:12:03.535: E/AndroidRuntime(6339): FATAL EXCEPTION: main
11-22 11:12:03.535: E/AndroidRuntime(6339): java.lang.NullPointerException
11-22 11:12:03.535: E/AndroidRuntime(6339):         at com.example.spinthebottle.FirstActivity$4.onClick(FirstActivity.java:176)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at android.view.View.performClick(View.java:4247)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at android.view.View$PerformClick.run(View.java:17728)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at android.os.Handler.handleCallback(Handler.java:730)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at android.os.Handler.dispatchMessage(Handler.java:92)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at android.os.Looper.loop(Looper.java:137)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at android.app.ActivityThread.main(ActivityThread.java:5289)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at java.lang.reflect.Method.invokeNative(Native Method)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at java.lang.reflect.Method.invoke(Method.java:525)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
11-22 11:12:03.535: E/AndroidRuntime(6339):         at dalvik.system.NativeStart.main(Native Method)

La cosa strana è che viene compilato tutto correttamente, il findByIdView funziona correttamente e quindi dovrebbe vederlo...

Offline kalacta269

  • Utente normale
  • ***
  • Post: 152
  • Respect: +14
    • Mostra profilo
  • Dispositivo Android:
    Asus Transformer pad tf300
  • Sistema operativo:
    windows7
Re:Lettura EditText dentro un popup
« Risposta #5 il: 22 Novembre 2013, 11:30:54 CET »
0
bhe se hai un nullPointer mi sa che il findViewById non ha funzionato guardando il tuo codice ho visto che come id hai messo TextView11 non è che hai sbagliato id ed hai messo un 1 in più?

Offline roby492

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Windows 7
Re:Lettura EditText dentro un popup
« Risposta #6 il: 22 Novembre 2013, 11:43:51 CET »
0
No non è un errore quello. Ho cambiato il nome in 11 in uno dei miei vani tentativi.

Comunque ho nell'xml:
<EditText
        android:id="@+id/editText11"
...
</editText>


e nel codice Java dichiaro:

final EditText nuovoNome;
nuovoNome = (EditText) findViewById(R.id.editText11);

che non da alcun errore...

Post unito: 22 Novembre 2013, 14:44:48 CET
Alla fine ho risolto con:

nuovoNome = (EditText) layout.findViewById(R.id.editText11);

Grazie
« Ultima modifica: 22 Novembre 2013, 14:44:48 CET da roby492, Reason: Merged DoublePost »