2012-05-10 39 views
0

我的問題是當我點擊ListView中的ImageView時,我需要顯示一個按鈕。 按鈕ID爲main.xml中的remoarMen。在ListView中點擊ImageView時顯示按鈕

我試着膨脹,在ArrayAdapter類中,但沒有顯示按鈕。

這是一個ArrayAdapter類的代碼:

package sms.manager; 

import android.content.Context; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.FrameLayout; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class Array extends ArrayAdapter{ 

private String[] datos; 
private ImageView img; 
private Button eliminar; 


public Array(Context context, int textViewResourceId,String[] items) { 
    super(context, textViewResourceId, items); 

    this.datos=items; 

} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    View v=convertView; 

    if(v==null){ 
     LayoutInflater 
    vi=(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v=vi.inflate(R.layout.cheks, null); 

    } 

     LayoutInflater 
    vi=(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view=null; 
     view=vi.inflate(R.layout.main, null); 
     eliminar=(Button)view.findViewById(R.id.eliminarMen); 


     TextView contiene=(TextView)v.findViewById(R.id.contieneTexto); 
     contiene.setText(datos[position]); 

     img=(ImageView)v.findViewById(R.id.icon); 
     final ImageView [] imagen=new ImageView[datos.length]; 
     imagen[position]=img; 
     imagen[position].setTag("unchecked"); 



     imagen[position].setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      eliminar.setVisibility(View.VISIBLE); 

      if (imagen[position].getTag()=="unchecked"){ 
       imagen[position].setImageResource(R.drawable.check); 
       imagen[position].setTag("checked"); 
      } 
      else 
      { 

          imagen[position].setImageResource(R.drawable.uncheck); 
       imagen[position].setTag("unchecked"); 
      } 
     } 

     }); 

    return v; 
} 
} 
+0

能否請您出示'Activity'代碼和'main.xml' – Louth

+0

我不知道該怎麼貼?代碼,因爲唯一的事情是讓我添加評論。 我該怎麼辦? – Quino

+0

對不起,我可以粘貼代碼 – Quino

回答

0

要得到的東西在你的活動發生從一個onclick在適配器中,你將不得不使用的界面如下圖所示:

public class MyArrayAdapter extends ArrayAdapter { 

    public interface OnImageClickListener { 
     public void onImageClick(int id); 
    } 

    public MyArrayAdapter(Context context, int textViewResourceId, String[] items) { 
     super(context, textViewResourceId, items); 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     .... 

     imagen[position].setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       OnImageClickListener activity = (OnImageClickListener) getContext(); 
       activity.onImageClick(R.id.some_image_id); 
      } 
     }); 

     ..... 

     return v; 
    } 
} 

那麼你的活動需要實現這個接口:

public class MainMenuActivity extends Activity implements OnImageClickListener{ 

     ImageView someImageView; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_main_menu); 

      someImageView = (ImageView) findViewById(R.id.your_image_view); 
     } 

     @Override 
     public void onImageClick(int id) { 
      someImageView.setImageResource(id); 
     } 
    } 

如果你的Activity沒有實現這個接口,你會得到一個錯誤在你的logcat

編輯

只注意到你要顯示一個按鈕,不顯示圖像。這是非常相似,你仍然會使用一個接口,這將意味着你不需要通過ID參考,並在您的活動onImageClick()只使用setVisibility(假設您的XML佈局中的按鈕被設置爲android:visibility="gone"

+0

我在發佈的代碼中,在onClick事件中使用了setVisibility,但按鈕沒有顯示。在LogCat中沒有錯誤,但按鈕沒有顯示。如何解析器this ?。 – Quino

+0

對不起,但我是西班牙語這是traduction: 我使用onClick事件中發佈的setvisivility代碼,但沒有顯示該按鈕。在logcat中沒有錯誤,但沒有顯示按鈕。如何解決這個問題? 一樣好,但從未顯示。默認情況下,按鈕的可見性在main.xml中爲GONE。 似乎膨脹不起作用,但代碼很好。 – Quino

+0

將XML中的可見性更改爲可見,你能看到它嗎?把一個日誌msg放在onImageClick()'Log.i(「TAG」,「in onImageClick」);'看看它是否到達那麼遠。調試調試調試 – Blundell

0

這是main.xml中:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/linearMain" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" android:onClick="eliminar"> 

<TableLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:layout_weight="1" 
    android:scrollbars="vertical"> 


    <TableRow 
     android:id="@+id/nuevo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

,這是活動代碼:

package sms.manager; 

import java.util.Timer; 
import java.util.TimerTask; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.ContextMenu; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.view.KeyEvent; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.view.ViewGroup.LayoutParams; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.TableRow; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SMSManagerActivity extends Activity implements   

OnItemClickListener,OnTouchListener { 

private String numero,texto,recibeNumBandera=""; 
public Button nuevo_mensaje,marcarVarios,eliminarMen; 
public ListView mensajes; 
private String []almacenaNombres,almacenaNumeros,datos,datos2; 
private int posicion,n,cantFilas=0,cant,posicionInfo=0; 
private ArrayAdapter<?> adaptador; 
public boolean entra=true,banderaServicio=true,inhabilitar=true; 
private TimerTask task; 
private Handler handler=new Handler(); 
private Timer t=new Timer(); 
private String maximo=""; 
private TableRow menu,nuevo,tableRow1; 
private TextView contienetexto; 
public ImageView icono; 
private LinearLayout layoutCheks,linearMain; 
private Array array; 



/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 




    mensajes=(ListView)findViewById(R.id.mensajes); 
    mensajes.setOnItemClickListener(this); 
    menu=(TableRow)findViewById(R.id.menu); 
    marcarVarios=(Button)findViewById(R.id.marcarVarios); 
    eliminarMen=(Button)findViewById(R.id.eliminarMen); 
    nuevo=(TableRow)findViewById(R.id.nuevo); 
    registerForContextMenu(mensajes); 
    nuevo_mensaje=(Button)findViewById(R.id.nuevo_mensaje); 
    nuevo_mensaje.setOnTouchListener(this); 
    LayoutInflater infl = (LayoutInflater)getSystemService 

    (Context.LAYOUT_INFLATER_SERVICE); 
    View view = infl.inflate(R.layout.cheks,null); 
    icono=(ImageView)view.findViewById(R.id.icon); 
    icono.setVisibility(8); 

    Intent service = new Intent(this, Servicios.class); 
    startService(service); 


    llenarList(); 

    task = new TimerTask() { 
     public void run() { 
       handler.post(new Runnable() { 
         public void run() { 
          marcar(); 

         } 

       }); 
     }}; 


     t.schedule(task, 500, 500); 





} 

public boolean onKeyDown(int keyCode, KeyEvent event){ 

    final Principal_mensajes cierraPrin= new Principal_mensajes(); 
    final ListaContactos lista= new ListaContactos(); 
    final Conversaciones conv= new Conversaciones(); 

    if (keyCode==KeyEvent.KEYCODE_BACK){ 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("SMS Manager se cerrará") 
     .setCancelable(false)  
     .setPositiveButton("Sí", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int id) {     

      cierraPrin.finish(); 
      lista.finish(); 
      conv.finish(); 
      finish(); 

     }  
     })  
     .setNegativeButton("No", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int id) {     
      dialog.cancel();   
      } 

     }); 

     AlertDialog alert = builder.create(); 
     alert.show(); 
     return true; 
    } 
    else if (keyCode==KeyEvent.KEYCODE_HOME){ 
     cierraPrin.finish(); 
     lista.finish(); 
     conv.finish(); 
     finish(); 
     return true; 
    } 
    else if (keyCode==KeyEvent.KEYCODE_MENU){ 

     menu.setVisibility(0); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 





@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

if (inhabilitar){ 
BaseDeDatos db2=new BaseDeDatos 
     (SMSManagerActivity.this,"administradorDeMensajes", null,5); 
     SQLiteDatabase desmarca=db2.getWritableDatabase(); 
     desmarca.execSQL("UPDATE conversaciones SET noLeido='' WHERE number='" + 
     almacenaNumeros[position] + "'"); 
     desmarca.close(); 
     db2.close(); 

     llenarList(); 

     Intent abreConversacion=new Intent(this,Conversaciones.class); 
abreConversacion.putExtra("contactoNom", almacenaNombres[position]); 
abreConversacion.putExtra("contactoNum", almacenaNumeros[position]); 
startActivity(abreConversacion); 
} 



} 



public void llenarList(){ 


    BaseDeDatos suplente=new BaseDeDatos(this,"administradorDeMensajes", null,5); 
     SQLiteDatabase base=suplente.getReadableDatabase(); 
     Cursor cursor=base.rawQuery("SELECT *,count(body) FROM conversaciones GROUP BY 
     number ORDER BY address ASC",null); 

    cantFilas=cursor.getCount(); 

    String fecha=""; 
    String nombre=""; 
    String cuerpo=""; 
    String numero=""; 
    String cantidad=""; 
    String noLeido=""; 



    datos=new String[cursor.getCount()]; 
    almacenaNombres=new String[cursor.getCount()]; 
    almacenaNumeros=new String[cursor.getCount()]; 



    n=-1; 

    while (cursor.moveToNext()){ 

    fecha=cursor.getString(cursor.getColumnIndex(("date"))); 
    nombre=cursor.getString(cursor.getColumnIndex(("address"))); 
    cuerpo=cursor.getString(cursor.getColumnIndex(("body"))); 
    noLeido=cursor.getString(cursor.getColumnIndex(("noLeido"))); 
    numero=cursor.getString(cursor.getColumnIndex(("number"))); 
    cantidad=cursor.getString(cursor.getColumnIndex(("count(body)"))); 


    if (cuerpo.length()>25){ 
    cuerpo=cuerpo.substring(0,25) + "..."; 
    } 

    if (!(noLeido!=null)){ 
     noLeido=""; 
    } 

    n++; 

    if (nombre.equals("No agendado")){ 
     datos[n]=noLeido + numero + "\n" + fecha + "\n" + cuerpo + "\n(" + 
       cantidad + ") mensajes"; 
    } 
    else 
     { 
     datos[n]=noLeido + nombre + "\n" + fecha + "\n" + cuerpo + "\n(" + cantidad 
     + ") mensajes"; 
     } 

    almacenaNombres[n]=nombre; 
    almacenaNumeros[n]=numero; 

    } 

    cursor.close(); 
    base.close(); 
    suplente.close(); 


    if (cantFilas!=0){ 
    adaptador=new ArrayAdapter<Object> 
    (this,android.R.layout.simple_list_item_1,datos); 
    mensajes.setAdapter(adaptador); 
    } 
else 
{ 
    Toast ninguno=Toast.makeText(SMSManagerActivity.this,"Lista de mensajes 
     vacía",Toast.LENGTH_LONG); 
    ninguno.show(); 

} 
} 


@Override 
public boolean onTouch(View arg0, MotionEvent arg1) { 
if (arg0.getId()==nuevo_mensaje.getId()){ 
    Intent nuevo = new Intent(this,Principal_mensajes.class); 
    startActivity(nuevo); 
    return true; 

} 
return false; 
} 



public void marcar(){ 

SharedPreferences p=getSharedPreferences("DatosNumero",Context.MODE_PRIVATE); 
    recibeNumBandera=p.getString("numeroPasado",""); 

if (!recibeNumBandera.equals("")){ 
    task.cancel(); 

    BaseDeDatos db=new BaseDeDatos(SMSManagerActivity.this,"administradorDeMensajes", 
    null,5); 
    SQLiteDatabase insertar=db.getWritableDatabase(); 

    insertar.execSQL("UPDATE conversaciones SET noLeido='' WHERE number='" + 
    recibeNumBandera + "'"); 
    insertar.close(); 
    db.close(); 


    BaseDeDatos sel=new BaseDeDatos 
    (SMSManagerActivity.this,"administradorDeMensajes", null,5); 
    SQLiteDatabase max=sel.getReadableDatabase(); 

    Cursor cursorMax=max.rawQuery("SELECT max(id) as maximo FROM conversaciones WHERE 
    number='" + recibeNumBandera + "'",null); 


    while (cursorMax.moveToNext()){ 
    maximo = cursorMax.getString(cursorMax.getColumnIndex(("maximo"))); 
    } 
    cursorMax.close(); 
    max.close(); 
    sel.close(); 

    BaseDeDatos db3=new BaseDeDatos 
    (SMSManagerActivity.this,"administradorDeMensajes", null,5); 
    SQLiteDatabase insertar2=db3.getWritableDatabase(); 
    insertar2.execSQL("UPDATE conversaciones SET noLeido='*' WHERE number='" + 
    recibeNumBandera + "' AND id='" + maximo + "'"); 
    insertar2.close(); 
    db3.close(); 

    BaseDeDatos PasaNum2=new BaseDeDatos 
    (SMSManagerActivity.this,"administradorDeMensajes", null,5); 
    SQLiteDatabase paraEsc=PasaNum2.getWritableDatabase(); 
    paraEsc.execSQL("DELETE FROM PasaNum"); 
    paraEsc.close(); 
    PasaNum2.close(); 

    llenarList(); 

    SharedPreferences pr=getSharedPreferences 
    ("DatosNumero",Context.MODE_PRIVATE); 
    Editor ed=pr.edit(); 
    ed.putString("numeroPasado",""); 
    ed.commit(); 

    task.run(); 

} 
} 


@Override 
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { 
super.onCreateContextMenu(menu, v, menuInfo); 


AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) 
menuInfo; 
menu.setHeaderTitle(almacenaNombres[info.position]); 

posicionInfo=info.position; 

menu.add(0, v.getId(), 0, "Ver"); 
menu.add(0, v.getId(), 0, "Eliminar conversación"); 

} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 

if(item.getTitle()=="Ver"){ 

Intent abreConversacion2=new Intent(this,Conversaciones.class); 
abreConversacion2.putExtra("contactoNom", almacenaNombres[posicionInfo]); 
abreConversacion2.putExtra("contactoNum", almacenaNumeros[posicionInfo]); 
startActivity(abreConversacion2); 
    return true; 
} 
else if(item.getTitle()=="Eliminar conversación"){ 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 

    builder.setTitle("Confirmación"); 
    builder.setMessage("Está seguro de eliminar la conversación con " + 
     almacenaNombres[posicionInfo] + "?") 
    .setCancelable(false) 
    .setPositiveButton("Aceptar", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 

    BaseDeDatos administraM=new BaseDeDatos 
    (SMSManagerActivity.this,"administradorDeMensajes", null,5); 
    SQLiteDatabase elimina=administraM.getWritableDatabase(); 
    elimina.execSQL("DELETE FROM conversaciones WHERE address='" + almacenaNombres 
    [posicionInfo] + "'"); 
    elimina.close(); 
    administraM.close(); 

    BaseDeDatos administraM2=new BaseDeDatos 
    (SMSManagerActivity.this,"administradorDeMensajes", null,5); 
    SQLiteDatabase elimina2=administraM2.getWritableDatabase(); 
    elimina2.execSQL("DELETE FROM recibidos WHERE address='" + almacenaNombres 
    [posicionInfo] + "'"); 
    elimina2.close(); 
    administraM2.close(); 

    BaseDeDatos administraM3=new BaseDeDatos 
     (SMSManagerActivity.this,"administradorDeMensajes", null,5); 
    SQLiteDatabase elimina3=administraM3.getWritableDatabase(); 
    elimina3.execSQL("DELETE FROM enviados WHERE address='" + almacenaNombres 
    [posicionInfo] + "'"); 
    elimina3.close(); 
    administraM3.close(); 

    llenarList(); 

    } 
    }) 
    .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() { 

    public void onClick(DialogInterface dialog, int id) {     
     dialog.cancel();   
     } 

    }); 

    AlertDialog alert = builder.create(); 
    alert.show(); 

    return true; 
} 
else 
{ 
    return false; 
} 

} 

public void marcar(View view){ 

nuevo.setVisibility(8); 
menu.setVisibility(8); 
inhabilitar=false; 


array= new Array(this,R.layout.main,datos); 
mensajes.setAdapter(array); 

} 

public void eliminar(View view){ 

} 



}