Autore Topic: attributo onClick  (Letto 4408 volte)

Offline tsubaiam

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
attributo onClick
« il: 20 Dicembre 2010, 10:43:00 CET »
0
Ciao a tutti...sono nuovo (sia del forum sia del mondo android  :-))
Spero mi possiate aiutare su questo problema che mi sta ormai tormentando da diversi giorni...

Dunque io ho una ListView, all'interno di ogni riga sono presenti una TextView ed una ImageView. Ho la necessità di abilitare il click sia su tutto l'item che sull'immagine: se si clicca sulla riga il programma ri chiama un metodo, se si clicca sull'immagine interna alla riga se ne richiama un altro.
Per il click sull'item non ho avuto problemi settando:

Codice (Java): [Seleziona]
getListView().setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.i("CLICK", id + " clicked");
            }
 });

Per il click sull'immagine ho pensato di sfruttare l'attributo onClick definibile direttamente nell'XML. Nel file row.xml (quello che definisce il layout della riga) ho messo tra gli attributi della ImageView:
Codice (XML): [Seleziona]
android:onClick="infoClick" e nel sorgente java all'interno della mia classe (che estende una ListActivity) ho definito il metodo:

Codice (Java): [Seleziona]
public void infoClick(View v){
                Log.i("CLICK", "info");
}

Quando però lancio la simulazione e clicco sull'imaggine il LogCat mi dice:

Uncaught handler: thread main exiting due to uncaught exception
java.lang.IllegalStateException: Could not find a method infoClick(View) in the activity


Sinceramente non capisco come mai questa eccezione visto che il metodo è definito proprio all'interno dell'activity...  :-[

Potete aiutarmi? grazie mille in aticipo

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:attributo onClick
« Risposta #1 il: 20 Dicembre 2010, 10:49:41 CET »
0
hai provato a fare un clean del progetto?
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline tsubaiam

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:attributo onClick
« Risposta #2 il: 20 Dicembre 2010, 14:09:36 CET »
0
Provato, ma dà sempre lo stesso errore  :'(

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:attributo onClick
« Risposta #3 il: 20 Dicembre 2010, 14:15:55 CET »
0
controlla gli import che fai nell'activity, forse hai importato una classe View errata.
questa è quella giusta:
android.view.View

Offline tsubaiam

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:attributo onClick
« Risposta #4 il: 20 Dicembre 2010, 14:19:33 CET »
0
Ho controllato, la classe android.view.View c'è.
Questi sono tutti gli import che utilizzo:

Codice (Java): [Seleziona]
import java.util.ArrayList;
import java.util.HashMap;

import org.me.project.R;

import android.app.ListActivity;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:attributo onClick
« Risposta #5 il: 20 Dicembre 2010, 15:14:43 CET »
0
che versione dell'sdk hai come target? minSdk? emulatore? puoi postare il manifest xml?

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:attributo onClick
« Risposta #6 il: 20 Dicembre 2010, 15:31:45 CET »
0
In un caso la "C" di infoclick è maiuscola, nell'altro è minuscola.

Offline tsubaiam

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:attributo onClick
« Risposta #7 il: 21 Dicembre 2010, 16:33:36 CET »
0
che versione dell'sdk hai come target? minSdk? emulatore? puoi postare il manifest xml?
Come target ho Android 2.1-update (API level 7), minSdk 7, emulatore uguale (Android 2.1-update, API level 7).
Qua c'è il manifest
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="org.me.project"
     android:versionCode="1"
     android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
                <activity android:label="project" android:name=".activities.ProjectSplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
                android:name=".activities.ProjectList">
                </activity>
        </application>
        <uses-sdk android:minSdkVersion="7"></uses-sdk>
</manifest>

In un caso la "C" di infoclick è maiuscola, nell'altro è minuscola.
Non mi pare, sull'XML c'è:
Codice (XML): [Seleziona]
android:onClick="infoClick"mentre sulla classe java c'è:
Codice (Java): [Seleziona]
public void infoClick(View v){
                Log.i("CLICK", "info");
}

Le C sono maiuscole in entrambi i casi  :-)

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:attributo onClick
« Risposta #8 il: 21 Dicembre 2010, 16:39:46 CET »
0
Errore mio...

Posta pure l'xml del layout!

Offline tsubaiam

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:attributo onClick
« Risposta #9 il: 21 Dicembre 2010, 16:55:35 CET »
0
Questo è l'xml di riga

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
        android:id="@+id/listRowLayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <LinearLayout
                android:id="@+id/LinearLayout02"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center_vertical|center_horizontal"
                android:layout_width="60dip">
                <ImageView
                        android:layout_width="40dip"
                        android:id="@+id/circle"
                        android:layout_height="40dip"
                        android:layout_marginTop="5dip">
                </ImageView>
                <LinearLayout
                        android:layout_width="wrap_content"
                        android:id="@+id/LinearLayout03"
                        android:layout_height="wrap_content">
                        <TextView
                                android:text="free"
                                android:id="@+id/free"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content">
                        </TextView>
                        <TextView
                                android:text=" / "
                                android:id="@+id/TextView01"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content">
                        </TextView>
                        <TextView
                                android:text="total"
                                android:id="@+id/total"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content">
                        </TextView>            
                </LinearLayout>
        </LinearLayout>
        <TextView
                android:text="name"
                android:id="@+id/name"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_marginLeft="10dip"
                android:layout_weight="10"
                android:gravity="center_vertical|center_horizontal">
        </TextView>
        <TextView
                android:text="distance"
                android:id="@+id/distance"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:layout_marginLeft="10dip"
                android:layout_weight="0.5">
        </TextView>
        <TextView
                android:text=" Km"
                android:id="@+id/TextView02"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:layout_weight="0.5">
        </TextView>
        <ImageView
                android:id="@+id/info"
                android:layout_width="30dip"
                android:layout_height="fill_parent"
                android:src="@drawable/info"
                android:gravity="center_vertical"
                android:layout_marginLeft="10dip"
                android:layout_weight="1"
                android:onClick="infoClick">
        </ImageView>
</LinearLayout>

inoltre, non so se può servire, questo file row.xml si trova in res/layout/ mentre la classe java in src/org/me/project/activities/

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:attributo onClick
« Risposta #10 il: 21 Dicembre 2010, 16:59:15 CET »
0
Sembra tutto ok... quindi serve anche il codice dell'activity!

Offline tsubaiam

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:attributo onClick
« Risposta #11 il: 22 Dicembre 2010, 10:45:25 CET »
0
Eccolo qua  :-)
La funzione setTopBar visualizza una menu fisso in cima alla lista e l'oggetto myMenu ne visualizza uno in fondo alla lista.
Per il resto ti ho risparmiato tutta la parte di codice in cui riempio l'ArrayList data  ;-)

Codice (Java): [Seleziona]
public class ProjectList extends ListActivity {
       
     public void infoClick(View v){
        Log.i("CLICK", "info");
     }
       
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
       
        setTopBar();
       
        MyMenu myMenu = new MyMenu(this);
        myMenu.setFocusedItem(0, this);

        //creazione dell' ArrayList<HashMap<String, Object>> data e degli array from e to
       
        //costruzione dell'adapter
        SimpleAdapter adapter = new SimpleAdapter(
                        getApplicationContext(),
                        data, //sorgente dati
                        R.layout.row, //layout contenente gli id di "to"
                        from,
                        to);
       
        //utilizzo dell'adapter
        setListAdapter(adapter);
       
        getListView().setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.i("CLICK", id + " clicked");
            }
           
        });
       
    }

}

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:attributo onClick
« Risposta #12 il: 22 Dicembre 2010, 10:54:18 CET »
0
Non vorrei dire un'altra cacchiata... ma nel post dove hai pubblicato l'xml hai detto che il file si chiama row.xml, mentre il setContentView lo fai di R.layout.list e non di R.layout.row.

Non è questo l'errore sicuramente (non genererebbe quello che tu hai detto), ma vista la grande confusione ti chiedo di postare *tutto* il progetto con tutti i sorgenti come allegato ad un post.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:attributo onClick
« Risposta #13 il: 22 Dicembre 2010, 11:01:07 CET »
0
a me non convince il manifest:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    [b]package="org.me.project"[/b]
    android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
                <activity android:label="project" android:name=[b]".activities.ProjectSplashScreen"[/b]>
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
               android:name=".activities.ProjectList">
                </activity>
        </application>
        <uses-sdk android:minSdkVersion="7"></uses-sdk>
</manifest>

metti activities nella descrizione del package e togli .activities dalle activity, magari non è quello, si sa mai...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:attributo onClick
« Risposta #14 il: 22 Dicembre 2010, 11:07:03 CET »
0
metti activities nella descrizione del package e togli .activities dalle activity, magari non è quello, si sa mai...

Mmm... non ci vedo nulla di male nel riorganizzare i package...