单击ListView中的ImageView时显示按钮

时间:2012-05-10 18:59:24

标签: android

我的问题是,当我点击ImageView中的ListView时,我需要显示一个按钮。 按钮ID在main.xml中已消除。

我在ArrayAdapter类中尝试使用inflate,但按钮没有显示。

这是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;
}
 }

2 个答案:

答案 0 :(得分:0)

要从适配器中的O​​nClick中获得某些活动,您必须使用如下界面:

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;
    }
}

然后您的Activity需要实现此接口:

   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(假设按钮设置为android:visibility="gone"在你的XML布局中。

答案 1 :(得分: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){

}



}