我的问题是,当我点击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;
}
}
答案 0 :(得分: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;
}
}
然后您的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){
}
}