Como inserir um textview com imageview do lado direito?

20 respostas
A

Pessoal estou querendo colocar uma imagem junto com textview, mais não consigo alinhar esta imagem no final.

A forma que fiz foi esta
[img]http://666kb.com/i/cdh8lgmnyfpoyd9ua.jpg[/img]

O XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFF8DC"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/InnerRelativeLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/pdpacote"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_toRightOf="@+id/seta"
            android:textColor="#00008B"
            android:textSize="22sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/seta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:src="@drawable/azclienteseta" />
    </RelativeLayout>

    <TextView
        android:id="@+id/pdvalidade"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#006400"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/pdstatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#8B0000"
        android:textSize="15sp" />

</LinearLayout>

Tem como deixar esta imagem no final ao lado direito? Ou outra forma simples de colocar uma imagem junto com o textview?

Obrigado.

20 Respostas

fabriciov
<RelativeLayout
        android:id="@+id/InnerRelativeLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/pdpacote"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="lalalala"
            android:textColor="#00008B"
            android:textSize="22sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/seta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/azclienteseta" />

    </RelativeLayout>
A

Obrigado Fabriciomais ainda não deu certo

Ficou assim agora
[img]http://666kb.com/i/cdh9o4vl1cyn0arde.jpg[/img]

O XML agora está assim
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFF8DC"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/InnerRelativeLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/pdpacote"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"           
            android:textColor="#00008B"
            android:textSize="22sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/seta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/azclienteseta" />
    </RelativeLayout>

    <TextView
        android:id="@+id/pdvalidade"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#006400"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/pdstatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#8B0000"
        android:textSize="15sp" />

</LinearLayout>
fabriciov

sua listview esta com android:layout_width=“fill_parent” ?

edit:
para melhorar a aparencia, adicionar um android:ellipsize=“marquee” no seu textview pdpacote

Marky.Vasconcelos

Voce pode usar o android:drawableRight no seu TextView para isso.

Mas não sei se é possivel adicionar eventos desta maneira.

A

fabriciov:
sua listview esta com width=fill_parent ?

edit:
para melhorar a aparencia, adicionar um android:ellipsize=“marquee” no seu textview pdpacote

Olá Fabricio, desculpe não entendi sua resposta.

fabriciov

Acredito que esse Layout do Xml é usado para preencher uma ListView (um item de uma listView).

No código que te passei o imageview fica sempre no limite do parent à direita, se ele esta no meio quer dizer que o layout onde esta “hospedado” é limitado até ali.

A
Marky.Vasconcelos:
Voce pode usar o android:drawableRight no seu TextView para isso.

Mas não sei se é possivel adicionar eventos desta maneira.

Assim Marky Vasconcelos como você disse quase deu certo da forma que eu quero
[img]http://666kb.com/i/cdha8oebwu1yjttea.jpg[/img]

O XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFF8DC"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/pdpacote"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:drawableRight="@drawable/azclienteseta"
        android:textColor="#00008B"
        android:textSize="22sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/pdvalidade"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#006400"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/pdstatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#8B0000"
        android:textSize="15sp" />

</LinearLayout>
A
fabriciov:
Acredito que esse Layout do Xml é usado para preencher uma ListView (um item de uma listView).

No código que te passei o imageview fica sempre no limite do parent à direita, se ele esta no meio quer dizer que o layout onde esta "hospedado" é limitado até ali.

Olá Fabricio, era isso mesmo que vc falou

Arrumei la no hospedeiro
<LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent" >

                    <ListView
                        android:id="@+id/ListViewSeusPacotes"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:background="@drawable/shapetextview"
                        android:divider="#FFFFFF"
                        android:scrollbars="none" >
                    </ListView>
                </LinearLayout>
E voltei ao mesmo XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFF8DC"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/InnerRelativeLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/pdpacote"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:textColor="#00008B"
            android:textSize="22sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/seta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/azclienteseta" />
    </RelativeLayout>

    <TextView
        android:id="@+id/pdvalidade"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#006400"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/pdstatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#8B0000"
        android:textSize="15sp" />

</LinearLayout>

E agora ficou show
[img]http://666kb.com/i/cdhahvr6y4wouwp3m.jpg[/img]

Muito obrigado senhores pela ajuda.

Marky.Vasconcelos

Se voce usar o drawableLeft e deixar a view com match_parent o resultado será o mesmo.

A

Pessoal aproveitando o post, agora estou com outra duvida.

Tenho aqui na imagem um listview com imagem de um envelope aberto.
[img]http://666kb.com/i/cdjf4hjdkms4b13x1.jpg[/img]

Preciso incluir um envelope fechado quando não for lido a mensagem.

Tenho um select que faz isso, e ja testei e funciona, só que não sei como incluir isso no app

Tentei assim Criei uma classe
import android.widget.ImageView;

public class Mensagens {
	
	private String titulomensagem;
	private String datamensagem;
	private ImageView img;
	public String getTitulomensagem() {
		return titulomensagem;
	}
	public void setTitulomensagem(String titulomensagem) {
		this.titulomensagem = titulomensagem;
	}
	public String getDatamensagem() {
		return datamensagem;
	}
	public void setDatamensagem(String datamensagem) {
		this.datamensagem = datamensagem;
	}
	public ImageView getImg() {
		return img;
	}
	public void setImg(ImageView img) {
		this.img = img;
	}	

}
E outra classe que uso para preencher os dados no listview
import java.util.ArrayList;

import android.widget.ImageView;
import br.com.azsolucoes.azcliente.R;
import br.com.azsolucoes.azcliente.activities.AZClienteActivity;
import br.com.azsolucoes.azcliente.activities.MensagensActivity;
import br.com.azsolucoes.azcliente.embarcadero.DSProxy.TServerMethods1;
import br.com.azsolucoes.azcliente.embarcadero.DSRESTConnection;
import br.com.azsolucoes.azcliente.embarcadero.TDataSet;
import br.com.azsolucoes.azcliente.pojo.Mensagens;

public class ArrayMensagensCliente extends MensagensActivity {

	private GetConnection gc = new GetConnection();	
	private ImageView imagem;

	public ArrayList<Mensagens> getSearchResultsMensagens() {
		ArrayList<Mensagens> results = new ArrayList<Mensagens>();
	
		DSRESTConnection conn = gc.getConnection();
		TServerMethods1 serv = new TServerMethods1(conn);
		TDataSet ds;
		// ---------------------------------------
		try {
			ds = serv.MensagensAZCliente(AZClienteActivity.login.toString()
					.trim());
			while (ds.next()) {
				Mensagens srPT2 = new Mensagens();
				String concTituloEnviado = ds.getValue("TITULO").GetAsString();
				String concDataMensagemEnviada = "-Data: "
						+ ds.getValue("DATA_MENSAGEM").GetAsString() + ", "
						+ ds.getValue("HORAS").GetAsString();
				
				String retornaImg = ds.getValue("RETORNO").GetAsString();				

				srPT2.setTitulomensagem(concTituloEnviado);
				srPT2.setDatamensagem(concDataMensagemEnviada);
				
//				if (retornaImg.equals("Não")){
//					imagem.setImageResource(R.drawable.mensagemnova);
//					srPT2.setImg(imagem);
//				} else {
//					imagem.setImageResource(R.drawable.mensagemlida);
//					srPT2.setImg(imagem);
//				}
				
				results.add(srPT2);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return results;
	}
	
}

Ai tentei inserir as imagens nestas linhas comentadas, mais não funciona.

Tenho outra classe que uso também junto para preencher a lista, que tentei adaptar nela, mais também não funcionou
import java.util.ArrayList;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import br.com.azsolucoes.azcliente.R;
import br.com.azsolucoes.azcliente.activities.AZClienteActivity;
import br.com.azsolucoes.azcliente.embarcadero.DSProxy.TServerMethods1;
import br.com.azsolucoes.azcliente.embarcadero.DSRESTConnection;
import br.com.azsolucoes.azcliente.embarcadero.TDataSet;
import br.com.azsolucoes.azcliente.pojo.Mensagens;

public class MensagensBaseAdapter extends BaseAdapter {

	//private GetConnection gc = new GetConnection();
	private static ArrayList<Mensagens> searchArrayList;
	private LayoutInflater mInflater;

	public MensagensBaseAdapter(Context context, ArrayList<Mensagens> results) {
		searchArrayList = results;
		mInflater = LayoutInflater.from(context);
	}

	public int getCount() {
		return searchArrayList.size();
	}

	public Object getItem(int position) {
		return searchArrayList.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder;

		if (convertView == null) {
			convertView = mInflater.inflate(R.layout.custom_mensagens_row_view,
					null);
			holder = new ViewHolder();
			holder.txtTextoMensagemEnviada = (TextView) convertView
					.findViewById(R.id.textomensagens);
			holder.txtDataMensagemEnviada = (TextView) convertView
					.findViewById(R.id.dataenviomensagem);
			holder.txtHoraMensagemEnviada = (TextView) convertView
					.findViewById(R.id.horaenviomensagem);

			holder.imagem = (ImageView) convertView
					.findViewById(R.id.imgmensagemlida);			

			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.txtTextoMensagemEnviada.setText(searchArrayList.get(position)
				.getTitulomensagem());
		holder.txtDataMensagemEnviada.setText(searchArrayList.get(position)
				.getDatamensagem());
		
//		holder.txtHoraMensagemEnviada.setI (searchArrayList.get(position)
//				.getImg());
//		
//		if (mensagensLidas() == true) {
//			Log.i("AZCliente", "Passou aqui...");
//			holder.imagem.setImageResource(R.drawable.mensagemnova);
//		} else {
//			holder.imagem.setImageResource(R.drawable.mensagemlida);
//		}

		return convertView;
	}

	static class ViewHolder {
		TextView txtTextoMensagemEnviada;
		TextView txtDataMensagemEnviada;
		TextView txtHoraMensagemEnviada;
		ImageView imagem;
	}

//	public boolean mensagensLidas() {
//		boolean retorno = false;		
//		DSRESTConnection conn = gc.getConnection();
//		TServerMethods1 serv = new TServerMethods1(conn);
//		TDataSet ds;
//		// ---------------------------------------
//		try {
//			ds = serv.MensagensAZClienteLidas(AZClienteActivity.login
//					.toString().trim());
//			while (ds.next()) {		
//
//				String retornoValor = ds.getValue("RETORNO")
//						.GetAsString();
//				
//				if (retornoValor.equals("Sim")){
//					retorno = true;
//				} else {
//					retorno = false;
//				}				
//			}
//
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return retorno;
//	}
}

Alguém pode dizer uma forma de fazer o que preciso?

Obrigado.

Marky.Vasconcelos

É exatamente no adapter como voce deixou comentado, não está funcionando?

A
Marky.Vasconcelos:
É exatamente no adapter como voce deixou comentado, não está funcionando?
Então Marky.Vasconcelos, fiz a classe aqui assim
package br.com.azsolucoes.azcliente.carregadados;

import java.util.ArrayList;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import br.com.azsolucoes.azcliente.R;
import br.com.azsolucoes.azcliente.activities.AZClienteActivity;
import br.com.azsolucoes.azcliente.embarcadero.DSProxy.TServerMethods1;
import br.com.azsolucoes.azcliente.embarcadero.DSRESTConnection;
import br.com.azsolucoes.azcliente.embarcadero.TDataSet;
import br.com.azsolucoes.azcliente.pojo.Mensagens;

public class MensagensBaseAdapter extends BaseAdapter {
	
	private GetConnection gc = new GetConnection();		
	private static ArrayList<Mensagens> searchArrayList;
	private LayoutInflater mInflater;

	public MensagensBaseAdapter(Context context, ArrayList<Mensagens> results) {
		searchArrayList = results;
		mInflater = LayoutInflater.from(context);
	}

	public int getCount() {
		return searchArrayList.size();
	}

	public Object getItem(int position) {
		return searchArrayList.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder;

		if (convertView == null) {
			convertView = mInflater.inflate(R.layout.custom_mensagens_row_view,
					null);
			holder = new ViewHolder();
			holder.txtTextoMensagemEnviada = (TextView) convertView
					.findViewById(R.id.textomensagens);
			holder.txtDataMensagemEnviada = (TextView) convertView
					.findViewById(R.id.dataenviomensagem);			
			
			holder.imagem = (ImageView) convertView
					.findViewById(R.id.imgmensagemlida);			

			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.txtTextoMensagemEnviada.setText(searchArrayList.get(position)
				.getTitulomensagem());
		holder.txtDataMensagemEnviada.setText(searchArrayList.get(position)
				.getDatamensagem());		
		
		if (mensagensLidas() == true) {
			Log.i("AZCliente", "Passou aqui...");
			holder.imagem.setImageResource(R.drawable.mensagemnova);
		} else {
			holder.imagem.setImageResource(R.drawable.mensagemlida);
			Log.i("AZCliente", "Passou aqui imagem lida...");
		}
		return convertView;
	}

	static class ViewHolder {
		TextView txtTextoMensagemEnviada;
		TextView txtDataMensagemEnviada;
		TextView txtHoraMensagemEnviada;
		ImageView imagem;
	}

	public boolean mensagensLidas() {
		boolean retorno = false;		
		DSRESTConnection conn = gc.getConnection();
		TServerMethods1 serv = new TServerMethods1(conn);
		TDataSet ds;
		// ---------------------------------------
		try {
			ds = serv.MensagensAZClienteLidas(AZClienteActivity.login
					.toString().trim());			
					
			while (ds.next()) {	
				String retornoValor = ds.getValue("RETORNO")
						.GetAsString().trim();
				
				Log.i("AZCliente", retornoValor);	
				
				if (retornoValor.equals("Não")){
					retorno = true;					
				} else {
					retorno = false;
				}				
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return retorno;
	}
}

Mais no logcat ja descobri porque não da certo
[img]http://666kb.com/i/cdka64jx93knd7vo5.gif[/img]

Pois esta passando todos de uma só vez toda vez que passa por este método.
Ai o result é
Não
Sim
Sim

Só que precisaria que passase um de cada vez para conseguir fazer o método de mudança de imagem funcionar.

E não sei uma forma de fazer isso.

Obrigado.

Marky.Vasconcelos

Alias, seu método mensagensLidas() retorna de toda a lista, voce não deveria verificar se só o objeto da linha que foi lido ou não?

A
Marky.Vasconcelos:
Alias, seu método mensagensLidas() retorna de toda a lista, voce não deveria verificar se só o objeto da linha que foi lido ou não?
Sim é isso que estou tentando fazer, mais não estou conseguindo, teria que verificar uma a um na lista e não todos de uma só vez. Este método que fiz retorna o valor de um banco de dados atravez de um select Feito em delphi para um WS
function TServerMethods1.MensagensAZClienteLidas(Codigo: string): TDataSet;
begin
  with CDS_Tabelas do
  begin
    Close;
    CommandText := '     SELECT  '+
                   '       CASE  '+
                   '       WHEN (AZ_CLIENTE_MENSAGENS_LIDAS.CODIGO) IS NULL THEN '+
                   '             ''Não''  '+
                   '       ELSE  '+
                   '              ''Sim'' '+
                   '        END RETORNO, '+
                   '       AZ_CLIENTE_MENSAGENS.DATA_HORA '+
                   '       FROM AZ_CLIENTE_MENSAGENS '+
                   '  LEFT JOIN AZ_CLIENTE_MENSAGENS_LIDAS '+
                   '         ON AZ_CLIENTE_MENSAGENS.CODIGO = AZ_CLIENTE_MENSAGENS_LIDAS.CODIGO '+
                   '      WHERE CAST(AZ_CLIENTE_MENSAGENS.CLIENTE AS VARCHAR(30)) = '+QuotedStr(Codigo) +
                   '        AND AZ_CLIENTE_MENSAGENS.TIPO = ''Enviada'' '+
                  // '        AND AZ_CLIENTE_MENSAGENS_LIDAS.CODIGO IS NULL '+
                   '   ORDER BY 2 DESC ';
    Open;
    Result := CDS_Tabelas;
  end;
end;
E executado no metodo em java aqui
private DSRESTParameterMetaData[] TServerMethods1_MensagensAZClienteLidas_Metadata;

		private DSRESTParameterMetaData[] get_TServerMethods1_MensagensAZClienteLidas_Metadata() {
			if (TServerMethods1_MensagensAZClienteLidas_Metadata == null) {
				TServerMethods1_MensagensAZClienteLidas_Metadata = new DSRESTParameterMetaData[] {
						new DSRESTParameterMetaData("Codigo",
								DSRESTParamDirection.Input,
								DBXDataTypes.WideStringType, "string"),
						new DSRESTParameterMetaData("",
								DSRESTParamDirection.ReturnValue,
								DBXDataTypes.TableType, "TDataSet"), };
			}
			return TServerMethods1_MensagensAZClienteLidas_Metadata;
		}

		/**
		 * @param Codigo
		 *            [in] - Type on server: string
		 * @return result - Type on server: TDataSet
		 */
		public TDataSet MensagensAZClienteLidas(String Codigo)
				throws DBXException {
			DSRESTCommand cmd = getConnection().CreateCommand();
			cmd.setRequestType(DSHTTPRequestType.GET);
			cmd.setText("TServerMethods1.MensagensAZClienteLidas");
			cmd.prepare(get_TServerMethods1_MensagensAZClienteLidas_Metadata());
			cmd.getParameter(0).getValue().SetAsString(Codigo);
			getConnection().execute(cmd);
			return (TDataSet) cmd.getParameter(1).getValue().GetAsTable();
		}

Meu problema é passar um a um na lista para popular a imagem de envelope correto.

Alguma dica?

Muito obrigado.

Marky.Vasconcelos

Esse boolean deveria ser um campo do seu modelo e seu códigod everia ser:

holder.txtTextoMensagemEnviada.setText(searchArrayList.get(position)  
                .getTitulomensagem());  
        holder.txtDataMensagemEnviada.setText(searchArrayList.get(position)  
                .getDatamensagem());          
          
        if (searchArrayList.get(position).isMensagemLidas() == true) {  
            Log.i("AZCliente", "Passou aqui...");  
            holder.imagem.setImageResource(R.drawable.mensagemnova);  
        } else {  
            holder.imagem.setImageResource(R.drawable.mensagemlida);  
            Log.i("AZCliente", "Passou aqui imagem lida...");  
        }
A

Continua o mesmo problema

Com as mudanças coloquei o método em
package br.com.azsolucoes.azcliente.pojo;

import android.util.Log;
import br.com.azsolucoes.azcliente.activities.AZClienteActivity;
import br.com.azsolucoes.azcliente.carregadados.GetConnection;
import br.com.azsolucoes.azcliente.embarcadero.DSRESTConnection;
import br.com.azsolucoes.azcliente.embarcadero.TDataSet;
import br.com.azsolucoes.azcliente.embarcadero.DSProxy.TServerMethods1;

public class Mensagens {
	private GetConnection gc = new GetConnection();	
	
	private String titulomensagem;
	private String datamensagem;
	
	public String getTitulomensagem() {
		return titulomensagem;
	}
	public void setTitulomensagem(String titulomensagem) {
		this.titulomensagem = titulomensagem;
	}
	public String getDatamensagem() {
		return datamensagem;
	}
	public void setDatamensagem(String datamensagem) {
		this.datamensagem = datamensagem;
	}
	
	public boolean isMensagensLidas() {		
		boolean retorno = false;		
		DSRESTConnection conn = gc.getConnection();
		TServerMethods1 serv = new TServerMethods1(conn);
		TDataSet ds;
		// ---------------------------------------
		try {
			ds = serv.MensagensAZClienteLidas(AZClienteActivity.login
					.toString().trim());			
					
			while (ds.next()) {	
				String retornoValor = ds.getValue("RETORNO")
						.GetAsString().trim();
				
				Log.i("AZCliente", retornoValor);	
				
				if (retornoValor.equals("Não")){
					retorno = true;					
				} else {
					retorno = false;
				}				
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return retorno;
	}
}
e a classe ficou assim
import java.util.ArrayList;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import br.com.azsolucoes.azcliente.R;
import br.com.azsolucoes.azcliente.activities.AZClienteActivity;
import br.com.azsolucoes.azcliente.embarcadero.DSProxy.TServerMethods1;
import br.com.azsolucoes.azcliente.embarcadero.DSProxy.TServerMethods1.GetAceitaDesconto_ProdutoReturns;
import br.com.azsolucoes.azcliente.embarcadero.DSProxy.TServerMethods1.GetMensagensAZClienteLidasReturns;
import br.com.azsolucoes.azcliente.embarcadero.DSRESTConnection;
import br.com.azsolucoes.azcliente.embarcadero.TDataSet;
import br.com.azsolucoes.azcliente.pojo.Mensagens;

public class MensagensBaseAdapter extends BaseAdapter {
	
	private GetConnection gc = new GetConnection();		
	private static ArrayList<Mensagens> searchArrayList;
	private LayoutInflater mInflater;

	public MensagensBaseAdapter(Context context, ArrayList<Mensagens> results) {
		searchArrayList = results;
		mInflater = LayoutInflater.from(context);
	}

	public int getCount() {
		return searchArrayList.size();
	}

	public Object getItem(int position) {
		return searchArrayList.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder;

		if (convertView == null) {
			convertView = mInflater.inflate(R.layout.custom_mensagens_row_view,
					null);
			holder = new ViewHolder();
			holder.txtTextoMensagemEnviada = (TextView) convertView
					.findViewById(R.id.textomensagens);
			holder.txtDataMensagemEnviada = (TextView) convertView
					.findViewById(R.id.dataenviomensagem);			
			
			holder.imagem = (ImageView) convertView
					.findViewById(R.id.imgmensagemlida);			

			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.txtTextoMensagemEnviada.setText(searchArrayList.get(position)
				.getTitulomensagem());
		holder.txtDataMensagemEnviada.setText(searchArrayList.get(position)
				.getDatamensagem());	           
            
        if (searchArrayList.get(position).isMensagensLidas() == true) {    
            Log.i("AZCliente", "Passou aqui...");    
            holder.imagem.setImageResource(R.drawable.mensagemnova);    
        } else {    
            holder.imagem.setImageResource(R.drawable.mensagemlida);    
            Log.i("AZCliente", "Passou aqui imagem lida...");    
        }    		
		
		return convertView;
	}

	static class ViewHolder {
		TextView txtTextoMensagemEnviada;
		TextView txtDataMensagemEnviada;
		TextView txtHoraMensagemEnviada;
		ImageView imagem;
	}
}

Mais o problema perciste Marky.Vasconcelos.

Não sei se é porque o select retorna assim
[img]http://666kb.com/i/cdkfg9q3ugitv0g7p.png[/img]

Ou seja toda vez que chama o método isMensagemLidas()

Vai retornar os 3 resultado do select de uma só vez.

Teria que passar no primeiro e mostrar a imagem referente ao retorno do primeiro, depois ir para o proximo e mostrar a imagem, assim por diante, mais da forma que esta mostra tudo ao mesmo tempo por isso aparece somente a segunda imagem, porque no final do select é "Sim"

Teria que fazer um loop e ir populando as imagens, mais como fazer isso?

Obrigado.

Marky.Vasconcelos

Novamente, por que voce percorreu a lista no modelo?

Voce precisa popular um valor quando for criar ele.

A

Marky.Vasconcelos:
Novamente, por que voce percorreu a lista no modelo?

Voce precisa popular um valor quando for criar ele.

Acho que não estou entendendo então…Pode mostrar um exemplo então?

Marky.Vasconcelos

No seu model:

public class Mensagens {  
    
    private String titulomensagem;  
    private String datamensagem;  
private boolean mensagensLidas;
      
    public String getTitulomensagem() {  
        return titulomensagem;  
    }  
    public void setTitulomensagem(String titulomensagem) {  
        this.titulomensagem = titulomensagem;  
    }  
    public String getDatamensagem() {  
        return datamensagem;  
    }  
    public void setDatamensagem(String datamensagem) {  
        this.datamensagem = datamensagem;  
    }  
      
public void setMensagensLidas(boolean isLidas){
mensagensLidas = isLidas;
}
    public boolean isMensagensLidas() {       
         return mensagensLidas;  
    }  
}

Dai na onde voce controi os objetos da lista voce popula, algoc omo:

List<Mensagem> listarTodasMensagens(){
List<Mensagem> msgs;//new list
while(temProximoRegistro()){
ContentRow registro = proximoRegistro();
//Seta os valores no objeto baseado na linha do banco
Mensagem obj = new Mensagem();
obj.setMensagensLidas(registro.isLida());
obj.setText(obj.text());
msgs.add(obj);
}
}
return msgs;
}

Então quando for exibido o valor já está correto.

A

Ola Marky, não consegui usar sua idéia aqui, mais fiz um pequeno teste aqui assim

[java]String msgLidas[] = { “Não”, “Sim”, “Não” };

for (int i = 0; i < msgLidas.length; i++) {
        System.out.println(msgLidas[i]);
        if (msgLidas[i].equals("Não")) {               
            Log.i("AZCliente", "Passou aqui...");
            holder.imagem.setImageResource(R.drawable.mensagemnova);
        } else {
            holder.imagem.setImageResource(R.drawable.mensagemlida);
            Log.i("AZCliente", "Passou aqui imagem lida...");
        }
    }      [/java]

A imagem do logcat

Mais o engraçado é que não deixa as imagens como preciso
Ficam todas assim

Criado 23 de abril de 2013
Ultima resposta 7 de mai. de 2013
Respostas 20
Participantes 3