segunda-feira, 7 de novembro de 2011

ListActivity + SQLite - Como criar uma lista no Android

ListActivity + SQLite - Como criar uma lista no Android

Primeiro criaremos uma ListActivity, essa é a parte fácil, vamos criar um novo projeto, e ele vai criar automaticamente a Activity base, nela vamos alterar a linha "extends Activity" para "extends ListActivity", agora precisamos alterar o layout, abra o main.xml, e adicione um ListView, para funcionar corretamente o ListView da ListActivity tem que ter a propriedade (android:id="@android:id/list").

public class NossaLista extends ListActivity {


}

Pronto, temos nossa ListActivity, agora como podemos populá-la? Isso é bem simples, primeiro crie uma variável do tipo SQLiteDatabase, essa é a nossa conexão com o banco de dados, agora vamos abri-la com o comando (openOrCreateDatabase())

public class NossaLista extends ListActivity {
        private SQLiteDatabase database;


        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                database = openOrCreateDatabase("Data.db", SQLiteDatabase.CREATE_IF_NECESSARY,
                        null);
        }


}


Agora, temos que criar o SQL que irá criar a tabela com a qual iremos trabalhar, lembrando que para funcionar com o CursorAdapter você SEMPRE irá precisar do campo "_id" na sua tabela.


public class NossaLista extends ListActivity {
        private SQLiteDatabase database;
        private final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS tabela ( " +
                                                                            "_id INTEGER, " +
                                                                            "descricao TEXT);";
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                database = openOrCreateDatabase("Data.db", SQLiteDatabase.CREATE_IF_NECESSARY,
                        null);
                database.execSQL(CREATE_TABLE);
        }


}


Pronto, já temos nossa tabela criada, agora vamos criar nosso cursor e nosso adapter.


public class NossaLista extends ListActivity {
        private SQLiteDatabase database;
        private Cursor cursor;
        private SimpleCursorAdapter adapter;
        private final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS tabela ( " +
                                                                            "_id INTEGER AUTOINCREMENT, " +
                                                                            "descricao TEXT);";
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                database = openOrCreateDatabase("Data.db", SQLiteDatabase.CREATE_IF_NECESSARY,
                        null);
                database.execSQL(CREATE_TABLE);
                database.execSQL("insert into tabela (descricao) values ('teste1');");
                database.execSQL("insert into tabela (descricao) values ('teste2');");
                cursor = data.query("tabela", new String[] {"_id", "descricao"}, null, null, null, null, null);
                adapter = new SimpleCursorAdapter(this, R.layout.itens, cursor, 
                                                new String[] {"descricao", "_id"}, new int[] {R.id.textView1});
                setListAdapter(adapter);
       }
}


Pronto, agora está pronta nossa ListActivity trabalhando com SQLite. Lembrando que temos que criar um layout chamado itens.xml, com um textView com o id textView1 para funcionar normalmente. Reparem que troquei a ordem das colunas, isso é porque a ordem das colunas na criação do adapter mostra aonde vai "bindar" o campo, se trocassemos ao invés de aparecer a coluna "descricao" no textView iria aparecer a coluna "_id"

quinta-feira, 3 de novembro de 2011

Preferences - Android Development

Preferences - Android Development

O que é:
Preferences é a tela de configuração (settings) do seu app, nessa activitiy que você terá todas as opções do seu aplicativo.
Dentro de uma PreferenceActivity você poderá ter 7 opções de componentes para usar:
-CheckBoxPreference: Como se fosse um checkbox normal, retorna true ou false.
-ListPreference: Mostra uma lista para o usuário selecionar 1 item. A propriedade android:entries tem que apontar para um array localizado no res/values/arrays.xml, e o android:entryValues é o array com os itens retornados.


-EditTextPreference: Mostra um dialog com um edittext.


-RingtonePreference: Como se fosse um ListPreference mas com os valores dos ringtones.


-Preference: Como se fosse um botão.


-PreferenceScreen: Abre uma nova tela de preferences.


-PreferenceCategory: Serve para separar as preferências em categorias.


Como criar uma PreferenceActivitiy:
Primeiro de tudo precisamos criar na pasta res/xml um arquivo chamado preference.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory
                android:title="1 Categoria">
                <CheckBoxPreference
                        android:title="Checkbox Preference"
                        android:defaultValue="false"
                        android:key="checkboxPref" />
                <ListPreference
                        android:title="List Preference"
                        android:key="listPref"
                        android:defaultValue="digiGreen"
                        android:entries="@array/listArray"
                        android:entryValues="@array/listValues" />
        </PreferenceCategory>
        <PreferenceCategory
                android:title="Second Category">
        <EditTextPreference
                android:name="EditText Preference"
                android:defaultValue="Nothing"
                android:title="Edit This Text"
                android:key="editTextPref" />
        <RingtonePreference
                android:name="Ringtone Preference"
                android:title="Ringtones"
                android:key="ringtonePref" />
        <PreferenceScreen
                android:key="SecondPrefScreen"
                android:title="Second PreferenceScreen"
                <EditTextPreference
                        android:name="An other EditText Preference"
                        android:title="Edit text"
                        android:key="SecondEditTextPref" />
        </PreferenceScreen>
        <Preference
                android:title="Custom Preference"
                android:key="customPref" />
        </PreferenceCategory>
</PreferenceScreen>

Agora precisamos criar nossa classe que extenderá da PreferenceActivity:

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.Toast;
 
public class Preferences extends PreferenceActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.preferences);
                // Get the custom preference
                Preference customPref = (Preference) findPreference("customPref");
                customPref
                                .setOnPreferenceClickListener(new OnPreferenceClickListener() {
 
                                        public boolean onPreferenceClick(Preference preference) {
                                                Toast.makeText(getBaseContext(),
                                                                "The custom preference has been clicked",
                                                                Toast.LENGTH_LONG).show();
                                                SharedPreferences customSharedPreference = getSharedPreferences(
                                                                "myCustomSharedPrefs", Activity.MODE_PRIVATE);
                                                SharedPreferences.Editor editor = customSharedPreference
                                                                .edit();
                                                editor.putString("myCustomPref",
                                                                "The preference has been clicked");
                                                editor.commit();
                                                return true;
                                        }
 
                                });
        }
}

Para pegarmos os valores definidos na Preference, devemos criar um método getPrefs() que pode ser chamado no onStart(). Ele deve ser assim:

boolean CheckboxPreference;
        String ListPreference;
        String editTextPreference;
        String ringtonePreference;
        String secondEditTextPreference;
        String customPref;
 
        private void getPrefs() {
                // Get the xml/preferences.xml preferences
                SharedPreferences prefs = PreferenceManager
                                .getDefaultSharedPreferences(getBaseContext());
                CheckboxPreference = prefs.getBoolean("checkboxPref", true);
                ListPreference = prefs.getString("listPref", "nr1");
                editTextPreference = prefs.getString("editTextPref",
                                "Nothing has been entered");
                ringtonePreference = prefs.getString("ringtonePref",
                                "DEFAULT_RINGTONE_URI");
                secondEditTextPreference = prefs.getString("SecondEditTextPref",
                                "Nothing has been entered");
                // Get the custom preference
                SharedPreferences mySharedPreferences = getSharedPreferences(
                                "myCustomSharedPrefs", Activity.MODE_PRIVATE);
                customPref = mySharedPreferences.getString("myCusomPref", "");
        }
Pronto, após isso, só precisamos declarar a activity no nosso manifest:

<activity
        android:name=".Preferences"
        android:label="@string/set_preferences">
</activity>
E pronto, nossa tela de configurações já está funcionando, e ela deve se parecer com isso: