[RESOLVIDO] Android: ViewPager com Fragments

Olá, amigos.

Estou tentando fazer o seguinte: tenho um ViewPager com vária páginas e quero preencher cada uma delas com um Fragment que contém um GridView que lista várias ‘Marcas’ que eu tenho cadastradas no banco de dados. Essas marcas são representadas apenas por um nome e uma imagem.

Seguindo exemplos do site do Android Developers eu consegui fazer um ViewPager, e consegui em outro exemplo fazer uma grid que exibisse as Marcas. Mas minha inexperiência em Android têm me dificultado a juntar os dois em um só. Por isso peço conselhos do pessoal mais familiarizado com a linguagem.

O que eu fiz está abaixo. Por enquanto ele só faz o ViewPager. Daí eu não sei muito para onde ir. Estou usando Android 4.

GuiPrincipal - é a Activity que faz o ViewPager.

package br.com.gextecnologia.testedeleiaute10;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ListFragment;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import br.com.gextecnologia.gui.GuiGrid;

public class GuiPrincipal extends Activity {

	static final int NUM_ITEMS = 10;

	MyAdapter mAdapter;

    ViewPager mPager;
	
	protected static GuiGrid grid;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gui_principal);
        
        grid = new GuiGrid();
        grid.setContext(this);

        mAdapter = new MyAdapter(getFragmentManager());

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        // Cliques dos botões
        Button button = (Button)findViewById(R.id.goto_first);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPager.setCurrentItem(0);
            }
        });
        button = (Button)findViewById(R.id.goto_last);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPager.setCurrentItem(NUM_ITEMS-1);
            }
        });
    } // Fim do método onCreate
	

	/**
	 * Exibe mensagem de informação no console.
	 * @param info Mensagem.
	 */
	protected void info(String info) {
		Log.d("INFO", "[GuiPrincipal] " + info);
	} // Fim do método info
	
	
	
	
	public static class MyAdapter extends FragmentStatePagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }

        @Override
        public Fragment getItem(int position) {
            return ArrayListFragment.newInstance(position);
        }
    } // Fim da classe MyAdapter

    public static class ArrayListFragment extends ListFragment {
        int mNum;

        /**
         * Cria uma nova instância do fragment, passando "num"
         * como parâmetro.
         */
        static ArrayListFragment newInstance(int num) {
            ArrayListFragment f = new ArrayListFragment();

            // Número da página do viewPager
            Bundle args = new Bundle();
            args.putInt("num", num);
            f.setArguments(args);
            
            // Introduzir o fragment aqui?

            return f;
        }

        /**
         * Ao criar, define o número da página.
         */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mNum = getArguments() != null ? getArguments().getInt("num") : 1;
        }

        /**
         * Por enquanto, o Fragment é apenas um texto com o número da página.
         */
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.gui_principal_list, container, false);
            View tv = v.findViewById(R.id.text);
            ((TextView)tv).setText("Fragment #" + mNum);
            
            // Devo implementar o grid aqui?

            return v;
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_1));
        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            Log.i("FragmentList", "Item clicked: " + id);
        }
    } // Fim da classe ArrayListFragment
	
	

} // Fim da classe GuiPrincipal

GuiGrid - É onde eu monto a grid com as ‘Marcas’ vindas do banco de dados

package br.com.gextecnologia.testedeleiaute10;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ListFragment;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import br.com.gextecnologia.gui.GuiGrid;

public class GuiPrincipal extends Activity {

	static final int NUM_ITEMS = 10;

	MyAdapter mAdapter;

    ViewPager mPager;
	
	protected static GuiGrid grid;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gui_principal);
        
        grid = new GuiGrid();
        grid.setContext(this);

        mAdapter = new MyAdapter(getFragmentManager());

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        // Cliques dos botões
        Button button = (Button)findViewById(R.id.goto_first);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPager.setCurrentItem(0);
            }
        });
        button = (Button)findViewById(R.id.goto_last);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPager.setCurrentItem(NUM_ITEMS-1);
            }
        });
    } // Fim do método onCreate
	

	/**
	 * Exibe mensagem de informação no console.
	 * @param info Mensagem.
	 */
	protected void info(String info) {
		Log.d("INFO", "[GuiPrincipal] " + info);
	} // Fim do método info
	
	
	
	
	public static class MyAdapter extends FragmentStatePagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }

        @Override
        public Fragment getItem(int position) {
            return ArrayListFragment.newInstance(position);
        }
    } // Fim da classe MyAdapter

    public static class ArrayListFragment extends ListFragment {
        int mNum;

        /**
         * Cria uma nova instância do fragment, passando "num"
         * como parâmetro.
         */
        static ArrayListFragment newInstance(int num) {
            ArrayListFragment f = new ArrayListFragment();

            // Número da página do viewPager
            Bundle args = new Bundle();
            args.putInt("num", num);
            f.setArguments(args);
            
            // Introduzir o fragment aqui?

            return f;
        }

        /**
         * Ao criar, define o número da página.
         */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mNum = getArguments() != null ? getArguments().getInt("num") : 1;
        }

        /**
         * Por enquanto, o Fragment é apenas um texto com o número da página.
         */
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.gui_principal_list, container, false);
            View tv = v.findViewById(R.id.text);
            ((TextView)tv).setText("Fragment #" + mNum);
            
            // Devo implementar o grid aqui?

            return v;
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_1));
        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            Log.i("FragmentList", "Item clicked: " + id);
        }
    } // Fim da classe ArrayListFragment
	
	

} // Fim da classe GuiPrincipal

gui_principal.xml - Leiaute do ViewPager.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:padding="4dip"
        android:gravity="center_horizontal"
        android:layout_width="match_parent" android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="0px"
            android:layout_weight="1">
    </android.support.v4.view.ViewPager>

    <LinearLayout android:orientation="horizontal"
            android:gravity="center" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content"
            android:layout_weight="0">
        <Button android:id="@+id/goto_first" 
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:text="@string/first">
        </Button>
        <Button android:id="@+id/goto_last"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:text="@string/last">
        </Button>
    </LinearLayout>
</LinearLayout>

gui_principal_list.xml - Leiaute do grid com as marcas.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:drawable/gallery_thumb">

    <TextView android:id="@+id/text"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:gravity="center_vertical|center_horizontal"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/hello_world"/>

    <!-- The frame layout is here since we will be showing either
    the empty view or the list view.  -->
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" >
        <!-- Here is the list. Since we are using a ListActivity, we
             have to call it "@android:id/list" so ListActivity will
             find it -->
        <ListView android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:drawSelectorOnTop="false"/>

        <!-- Here is the view to show if the list is emtpy -->
        <TextView android:id="@android:id/empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="No items."/>
        
	    <GridView
	        android:id="@+id/grid"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:verticalSpacing="5dp"
	        android:horizontalSpacing="5dp"
	        android:background="#f3f3f3"
	        android:numColumns="3" >
	    </GridView>

    </FrameLayout>

</LinearLayout>

Olá, pessoal. Consegui resolver!

Primeiramente mudei um pouco a mentalidade. Tirei aquela classe “GuiGrid” e criei outra chamada “GridAdapter”. Esta última cuida somente de fazer o adapter com os dados do banco que vão preencher o grid. Em cada grid em “gui_principal_list” (xml onde está o grid) vai possuir dentro um outro leiaute chamado “gui_view1”. E é aí que eu preenche os dados vindo do banco.

Na classe “GuiPrincipal” é a Activity que eu faço o ViewPager. E no método “onCreateView” puxo os dados. Na hierarquia fica mais ou menos assim:

ViewPager (gui_principal.xml) possui um GridView (gui_principal_list.xml) que possui um texto e foto com os dados (gui_view1.xml).

O código ficou assim:

GuiPrincipal - A activity do sistema

package br.com.gextecnologia.testedeleiaute10;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ListFragment;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.TextView;
import br.com.gextecnologia.adapter.GridAdapter;
import br.com.gextecnologia.controller.MarcaController;
import br.com.gextecnologia.gui.GuiGrid;
import br.com.gextecnologia.gui.GuiGrid.MarcaAdapter;

public class GuiPrincipal extends Activity {

	static final int NUM_ITEMS = 10;

	MyAdapter mAdapter;

    ViewPager mPager;
    
    /** Cursor de marcas para preencher esta tela. */
	private Cursor cursorMarca;
	/** Controlador do banco de dados. */
	private MarcaController dbMarca;
	
	
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gui_principal);
        
        
        
        this.dbMarca = new MarcaController(this);
		//this.dbMarca.insertsPadrao();
		this.cursorMarca = this.dbMarca.select();
		
		this.startManagingCursor(this.cursorMarca);
		
		info("Nr. colunas: " + this.cursorMarca.getColumnCount());
		info("Nr. linas: " + this.cursorMarca.getCount());
        

        mAdapter = new MyAdapter(getFragmentManager(), this, this.cursorMarca, this.dbMarca);

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        // Cliques dos botões
        Button button = (Button)findViewById(R.id.goto_first);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPager.setCurrentItem(0);
            }
        });
        button = (Button)findViewById(R.id.goto_last);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPager.setCurrentItem(NUM_ITEMS-1);
            }
        });
    } // Fim do método onCreate




	/**
	 * Exibe mensagem de informação no console.
	 * @param info Mensagem.
	 */
	protected void info(String info) {
		Log.d("INFO", "[GuiPrincipal] " + info);
	} // Fim do método info
	
	
	
	
	public static class MyAdapter extends FragmentStatePagerAdapter {
		private Context context;
		private Cursor cursor;
		private MarcaController dbMarca;
		public MyAdapter(FragmentManager fm, Context context, Cursor cursor, MarcaController db) {
            super(fm);
            this.context = context;
            this.cursor = cursor;
            this.dbMarca = db;
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }

        @Override
        public Fragment getItem(int position) {
            return ArrayListFragment.newInstance(this.context, this.cursor, this.dbMarca, position);
        }
    } // Fim da classe MyAdapter

    public static class ArrayListFragment extends ListFragment {
        int mNum;
        private static Context context;
        private static Cursor cursor;
        private static MarcaController dbMarca;
        
        

        /**
         * Cria uma nova instância do fragment, passando "num"
         * como parâmetro.
         */
        static ArrayListFragment newInstance(Context cont, Cursor curs, MarcaController db, int num) {
            
        	context = cont;
        	cursor = curs;
        	dbMarca = db;
        	
        	ArrayListFragment f = new ArrayListFragment();

            // Número da página do viewPager
            Bundle args = new Bundle();
            args.putInt("num", num);
            
            f.setArguments(args);

            return f;
        }

        /**
         * Ao criar, define o número da página.
         */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mNum = getArguments() != null ? getArguments().getInt("num") : 1;
        }

        /**
         * Por enquanto, o Fragment é apenas um texto com o número da página.
         */
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.gui_principal_list, container, false);
            View tv = v.findViewById(R.id.text);
            ((TextView)tv).setText("Fragment #" + mNum);
            
            View gv = v.findViewById(R.id.grid);

            // Aqui preencho o grid
            GridAdapter adapter = new GridAdapter(context, cursor, dbMarca, inflater);
            ((GridView)gv).setAdapter(adapter);

            return v;
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_1));
        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            Log.i("FragmentList", "Item clicked: " + id);
        }
    } // Fim da classe ArrayListFragment
	
	

} // Fim da classe GuiPrincipal

GridAdapter - Adapter para preencher os dados de gui_view1.xml.

[code]package br.com.gextecnologia.adapter;

import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import br.com.gextecnologia.controller.MarcaController;
import br.com.gextecnologia.testedeleiaute10.R;
import br.com.gextecnologia.util.ImagemUtil;

public class GridAdapter extends CursorAdapter {

protected final int NUM_REG_TELA = 6;
private Context context;
private LayoutInflater inflater;

/** Cursor de marcas para preencher esta tela. */
private Cursor cursorMarca;
/** Controlador do banco de dados. */
private MarcaController dbMarca;

public GridAdapter(Context context, Cursor c, MarcaController db, LayoutInflater inf) {
	super(context, c, true);
	this.context = context;
	this.cursorMarca = c;
	this.inflater = inf;
	this.dbMarca = db;
} // Fim do construtor

@Override
public void bindView(View view, Context context, Cursor cursor) {
	ArmazenadorMarca armazenador = (ArmazenadorMarca) view.getTag();
	armazenador.popularView(cursorMarca, dbMarca);
} // Fim do método bindView

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {

	View linha = inflater.inflate(R.layout.gui_view1, parent, false);
	ArmazenadorMarca armazenador = new ArmazenadorMarca(this.context, linha);
	linha.setTag(armazenador);
	return linha;

} // Fim do método newView

} // Fim da classe MarcaAdapter

class ArmazenadorMarca {

private Context context;
private ImageView iconImgMarca = null;
private TextView txtNomeMarca = null;

ArmazenadorMarca(Context c, View linha) {
	this.context = c;
	iconImgMarca = (ImageView) linha.findViewById(R.id.iconImgMarca);
	txtNomeMarca = (TextView) linha.findViewById(R.id.txtNomeMarca);
}

void popularView(Cursor c, MarcaController gerenciador) {
	
	/* Aqui eu faço a mágica, mando exibir o que vem do banco nos campos
	 * do gui_view1, preenchendo a imagem e o nome da marca. */
	if (gerenciador.getImgMarca(c) != null) {
		ImageView iv = ImagemUtil.converterBlobParaImagem(this.context,
				gerenciador.getImgMarca(c));
		iconImgMarca.setImageDrawable(iv.getDrawable());
		iconImgMarca.setImageResource(0);
	} // Fim do if */
	txtNomeMarca.setText(gerenciador.getNomeMarca(c));
}

} // Fim da classe ArmazenadorMarca

[/code]

E os leiautes:

gui_principal.xml

[code]<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1">
</android.support.v4.view.ViewPager>

<LinearLayout android:orientation="horizontal"
        android:gravity="center" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:layout_weight="0">
    <Button android:id="@+id/goto_first" 
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="@string/first">
    </Button>
    <Button android:id="@+id/goto_last"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="@string/last">
    </Button>
</LinearLayout>
[/code]

gui_principal_list.xml

[code]<?xml version="1.0" encoding="utf-8"?>

<TextView android:id="@+id/text"
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:gravity="center_vertical|center_horizontal"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/hello_world"/>

<!-- The frame layout is here since we will be showing either
the empty view or the list view.  -->
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="1" >
    <!-- Here is the list. Since we are using a ListActivity, we
         have to call it "@android:id/list" so ListActivity will
         find it -->
    <ListView android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:drawSelectorOnTop="false"/>

    <!-- Here is the view to show if the list is emtpy -->
    <TextView android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="No items."/>
    
    <GridView
        android:id="@+id/grid"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:verticalSpacing="5dp"
        android:horizontalSpacing="5dp"
        android:background="#f3f3f3"
        android:numColumns="3" >
    </GridView>

</FrameLayout>

[/code]

gui_view1.xml

[code]<?xml version="1.0" encoding="utf-8"?>

<ImageView
    android:id="@+id/iconImgMarca"
    android:layout_width="280dp"
    android:layout_height="280dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/cha_maca" />

<TextView
    android:id="@+id/txtNomeMarca"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/iconImgMarca"
    android:layout_marginLeft="2dp"
    android:layout_marginTop="2dp"
    android:text="TextoNaoMudou" />
[/code]

Agora é só ordenar certinho para dividir os dados em cada página. Por enquanto ele só repete os mesmos registros em cada ViewPager. Mas o difícil já passou.

Valeu e até a próxima!

Está usando o SQLite?

Sim, estou. Caso interessar, aqui vai minha classe controladora.

package br.com.gextecnologia.controller;

import java.sql.Blob;
import org.hibernate.lob.BlobImpl;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import br.com.gextecnologia.entity.Marca;

/**
 * Cria um controlador de banco de dados para as marcas dos sistema.
 * 
 * @author GEX Tecnologia
 */
public class MarcaController extends SQLiteOpenHelper {
	
	private static final String NOME_BANCO = "nomebanco.db";
        private static final int VERSAO_SCHEMA = 1;

	public MarcaController(Context context) {
		super(context, NOME_BANCO, null, VERSAO_SCHEMA);
 	} // Fim do construtor
	
	@Override
	public void onCreate(SQLiteDatabase db) {
		// CREATE TABLE
		db.execSQL("CREATE TABLE [marca] ( " +
					"[codMarca] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT, " +
					"[empresa_codEmpresa] INTEGER  NOT NULL, " +
					"[nomeMarca] TEXT  NOT NULL, " +
					"[imgMarca] BLOB  NULL, " +
					"[arqMarca] BLOB  NULL " +
					");");
		// DROP TABLE
		//db.execSQL("DROP TABLE IF EXISTS " + NOME_BANCO + ".marca");
	} // Fim do método onCreate

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
	} // Fim do método onUpgrade
	
	/**
	 * Pesquisa todos os registros no banco de dados.
	 * @return Cursor com os dados pesquisados.
	 */
	public Cursor select() {
		
		return select(0, 0);
		
	} // Fim do método select
	
	/**
	 * Pesquisa registros no banco de dados.
	 * @param limit Número máximo de linhas a retornar.
	 * @param offset Índice da linha de início da pesquisa dos registros.
	 * @return Cursor com os dados pesquisados.
	 */
	public Cursor select(int limit, int offset) {
		
		try {
			
			String sqlLimit = "";
			if (limit > 0) sqlLimit = " LIMIT " + limit;
			
			String sqlOffset = "";
			if (offset > 0) sqlOffset = " OFFSET " + offset;
			
			return this.getReadableDatabase().rawQuery(
					"SELECT codMarca AS _id, empresa_codEmpresa, nomeMarca, imgMarca, arqMarca " +
					"  FROM marca " +
					"ORDER BY codMarca, nomeMarca " +
					sqlLimit + sqlOffset, null);
		} catch (Exception ex) {
			info("Erro ao pesquisar marcas. " + ex.getMessage());
			return null;
		} // Fim do controle try/catch
		
	} // Fim do método select
	
	public int getCodMarca(Cursor c) {
	    return c.getInt(0);
	}
	
	public int getEmpresa_codEmpresa(Cursor c) {
		return c.getInt(1);
	}
	 
	public String getNomeMarca(Cursor c) {
	    return c.getString(2);
	}
	 
	public Blob getImgMarca(Cursor c) {
		return c.getBlob(3);
	}
	 
	public Blob getArqMarca(Cursor c) {
		return c.getBlob(4);
	}
	
} // Fim da classe MarcaController

Obrigado pelo retorno. Você tem Skype?

O meu é frederico.brigatte@itelefonica.com.br

Gtalk é frederico.brigatte@gmail.com

O que faz seu aplicativo? Você usa ActionBar nele?

Poderia me mandar um exemplo disso que fez?

Olá, amigo. Não, não tenho Skype e nem Gtalk.

O aplicativo apenas mostra uma lista de marcas (nome e imagem) em que o usuário pode ir navegando por páginas. Não uso ActionBar.

Coloquei neste tópico praticamente tudo que tem no projeto. É só seguir ali e ler no site do Android Developers, que tem um exemplo até melhor que o meu.

Abraços.

Manda pra mim compactado, tem como? Acho mais fácil, pode ser?

frederico.brigatte@gmail.com

Estou precisando de um exemplo simples de ListView com fragments.

Então o projeto todo ta postado aqui? Seria só copiar e colar no Eclipse? Vc arrumou o problema que tava tendo? A solução ta postada aqui?

Sim, inclusive já coloquei o [RESOLVIDO] no tópico.

A solução está no segundo post.

Ok, então é só copiar e colar? O projeto está completo, todos os xml e classes? Inclusive para usar a Classe que tem o banco? onyaszimba, você só está listando do banco, certo?

onyaszimba, como montar esse seu projeto? É só copiar e colar no Eclipse?

Como ta o seu strings.xml

Tentei fazer no Eclipse, ta faltando um monte de coisa, as imagens, alguns métodos. Posta o projeto, por favor.

Olá pessoal sou iniciante em programação Android, e estou com uma dificuldade em CheckBoxs e nova tela(fragmento).

É o seguinte, tenho uma Tela1 (Fragmento), com varios Checkboxs, nesta Tela1 o usuário vai selecionar os que ele quer, e depois clicar num Button com nome avançar, fazendo assim abrir uma nova tela (fragmento), onde nesta nova tela, que iremos chamar de Tela2, irá aparecer outros Checkboxs que serão os subitens de cada Checkbox selecionado na Tela1.

Ou seja, resumidamente, os Checkboxs da Tela1 são como se fosse “categorias”, e ao selecionar elas e depois clicar no botão Avançar deve abrir a Tela2 onde deve conter as “subcategorias” [destas categorias] em formato de Checkboxs tbm.

Como faço pra criar estas Telas (Fragmentos) que interagem (avançando e voltando)?
E como faço para a informações (subcategorias) do meus checkboxs selecionados na Tela1 apareçam na Tela2 em formato de novos checkboxs?

P.S.: lembrando que posso selecionar de um à varios checkboxs, que são as categorias [na Tela1], e cada um delas tem de 1 à varios subcategorias que irão aparecer na segunda tela [Tela2] (somente as das categorias selecionadas) como checkboxs.