2

J'ai fait un TextView et je veux faire quelque chose quand je clique dessus et quand je fais un long clic dessus. Le simple clic fonctionne bien mais quand je clique longuement sur le TextView la fermeture de l'activité.TextView longclick listener

Voici mon code.

if (c.moveToFirst()) 
    { 
     do 
     { 
      final String name = c.getString(0); 
      TextView resname = new TextView(this); 
      View line = new View(this); 
      //ImageButton pin = new ImageButton(this); 

      resname.setText(c.getString(0)); 
      resname.setTextColor(Color.WHITE); 
      resname.setTextSize(30); 
      resname.setTypeface(null,Typeface.BOLD); 
      resname.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
      resname.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Intent i = new Intent(); 
        if (getIntent().getStringExtra("type").contentEquals("Restaurant")){ 
         i.setClassName("com.mdl.cyrestaurants.guide", "com.mdl.cyrestaurants.guide.RestaurantDetails"); 
         i.putExtra("name",name); 
        } 
        else if(getIntent().getStringExtra("type").contentEquals("Cafe")){ 
         i.setClassName("com.mdl.cyrestaurants.guide", "com.mdl.cyrestaurants.guide.CafeDetails"); 
         i.putExtra("name",name); 
        } 
        else if(getIntent().getStringExtra("type").contentEquals("Bar")){ 
         i.setClassName("com.mdl.cyrestaurants.guide", "com.mdl.cyrestaurants.guide.BarDetails"); 
         i.putExtra("name",name); 
        } 
        startActivity(i); 
       } 
      }); 

      resname.setOnLongClickListener(new View.OnLongClickListener() { 

       @Override 
       public boolean onLongClick(View v) { 
        if(db.delpin(name)) 
         Toast.makeText(getBaseContext(), "Delete successful", Toast.LENGTH_SHORT).show(); 
        else 
         Toast.makeText(getBaseContext(), "Delete failed", Toast.LENGTH_SHORT).show(); 

        Intent i = new Intent(); 
        i.setClassName("com.mdl.cyrestaurants.guide", "com.mdl.cyrestaurants.guide.pins"); 
        i.putExtra("type", getIntent().getStringExtra("type")); 
        startActivity(i); 
        finish(); 

        return false; 
       } 
      }); 

      //pin.setImageResource(R.drawable.pin); 
      //pin.setBackgroundDrawable(getResources().getDrawable(R.drawable.unpin)); 
      //pin.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 


      line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,2)); 
      line.setBackgroundColor(Color.RED); 

      ((LinearLayout) layout).addView(resname); 
      //((LinearLayout) layout).addView(pin); 
      ((LinearLayout) layout).addView(line); 
     }while(c.moveToNext()); 

Logcat:

03-11 16:11:56.318: E/AndroidRuntime(11301): FATAL EXCEPTION: main 
03-11 16:11:56.318: E/AndroidRuntime(11301): java.lang.IllegalStateException: database not open 
03-11 16:11:56.318: E/AndroidRuntime(11301): at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1663) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at com.mdl.cyrestaurants.guide.DBAdapter.delpin(DBAdapter.java:422) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at com.mdl.cyrestaurants.guide.pins$2.onLongClick(pins.java:69) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at android.view.View.performLongClick(View.java:2427) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at android.widget.TextView.performLongClick(TextView.java:7430) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at android.view.View$CheckForLongPress.run(View.java:8793) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at android.os.Handler.handleCallback(Handler.java:587) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at android.os.Looper.loop(Looper.java:143) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at android.app.ActivityThread.main(ActivityThread.java:4914) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at java.lang.reflect.Method.invokeNative(Native Method) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at java.lang.reflect.Method.invoke(Method.java:521) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
03-11 16:11:56.318: E/AndroidRuntime(11301): at dalvik.system.NativeStart.main(Native Method) 
03-11 16:11:58.638: I/Process(11301): Sending signal. PID: 11301 SIG: 9 

Merci.

+1

Postez le logcat s'il vous plaît. – Egor

+0

s'il vous plaît poster le journal ainsi que l'ensemble du code de votre activité. –

+0

où est le problème? – stinepike

Répondre

1
base de données

pas ouvrir 03-11 16: 11: 56,318: E/AndroidRuntime (11301): à android.database.sqlite.SQLiteDatabase.delete (SQLiteDatabase.java:1663)

que vous essayez de faire la base de données opération sans ouverture de connexion

resname.setOnLongClickListener(new View.OnLongClickListener() { 

       @Override 
       public boolean onLongClick(View v) { 
        try 
        { 
        if(db.delpin(name)) 
         Toast.makeText(getBaseContext(), "Delete successful", Toast.LENGTH_SHORT).show(); 
        else 
         Toast.makeText(getBaseContext(), "Delete failed", Toast.LENGTH_SHORT).show(); 

        Intent i = new Intent(); 
        i.setClassName("com.mdl.cyrestaurants.guide", "com.mdl.cyrestaurants.guide.pins"); 
        i.putExtra("type", getIntent().getStringExtra("type")); 
        startActivity(i); 
        finish(); 
        }catch(Exception e) 
        { 
        // --------------------------------- 
         // handle error code here 
         // You have problem with db.delpin(name) 
        // --------------------------------- 

         return false; 
        } 
        return false; 
       } 
      }); 
+0

j'ai ouvert avant le si (c.moveToFirst()) – nestorasg

+0

vous devez partager db.delpin (nom) du code de la méthode – Talha

+0

Voici le code: Delpin public boolean (String name) { \t return db.delete ("Pin", "Name =" + nom, null)> 0; } – nestorasg