2012-05-10 16 views
0

ListViewImageViewをクリックすると、ボタンを表示する必要があります。 ボタンのIDはmain.xmlで削除されています。ListView内のImageViewをクリックすると、ボタンを表示します

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

は、あなたの 'Activity'コードとを表示してくださいすることができ、あなたの' main.xml' – Louth

+0

私は貼り付ける方法を知っていません?コードを作成することができます私はコメントがコメントです。 どうすればいいですか? – Quino

+0

申し訳ありませんが、私はコードを貼り付けることができました – Quino

答えて

0

あなたは以下のようなインタフェースを使用する必要がありますあなたのアダプタでクリック時から自分の活動に起こるために何かを取得するには:

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

アクティビティの場合あなたはLogCatでエラーになるだろう、このイ​​ンターフェイスを実装しませんでした

EDIT

はちょうどあなたがボタンを表示し、画像を表示しないようにしたい気づきました。それはあなたが依然としてインターフェイスを使用するのと非常によく似ています。つまり、ID参照を渡す必要はなく、アクティビティではsetVisibilityを使用するだけです(

+0

私はonClickイベント内の投稿コードにsetVisibilityを使用しましたが、ボタンは表示されません。LogCatはエラーではありませんが、ボタンは表示されません。 ? – Quino

+0

私は申し訳ありませんが、私はスペイン語ですtraduction: 私は、onClickイベント内でsetvisivilityを掲示したコードを使用していますが、ボタンは表示されていません。 logcatではエラーは発生しませんが、ボタンは表示されません。これを解決するには? も良いですが、決して表示されません。ボタンの可視性はmain.xmlのデフォルトではGONEです。 はうまくいかないようですが、コードは問題ありません。 – Quino

+0

XMLの可視性を可視に変更します。次にそれを確認できますか?ログメッセージをonImageClick() 'Log.i(" TAG "、" 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){ 

} 



} 
関連する問題