Escolar Documentos
Profissional Documentos
Cultura Documentos
comp=29924
www.devmedia.com.br
[versão para impressão]
Link original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=29924
1 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
O Android já utiliza um padrão MVC com os arquivos XML agindo como a view.
Contudo, isto não nos fornece quaisquer possibilidades reais de separação de
interesses.
2 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
Listagem 1. mvcModel.java
package com.devmedia.mvc;
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;
3 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
@Override
public void onUpgrade(final SQLiteDatabase db,
final int oldVersion, final int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS " + mvcModel.TABLE_NAME);
this.onCreate(db);
}
};
this.database = this.helper.getWritableDatabase();
}
4 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
return c;
}
}
A seguir podemos visualizar a classe que atua como View da aplicação, conforme
mostrado na Listagem 2.
Listagem 2. mvcView.java
import android.widget.TextView;
import com.devmedia.mvc.R;
@Override
public void onCreate(final Bundle bundle)
{
super.onCreate(bundle);
this.setContentView(R.layout.ui_main);
this.btNovaTarefa.setOnClickListener(this.handleNovaTarefaEvent);
this.populaTarefas();
}
5 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
this.lvTarefa.setAdapter(new ArrayAdapter<String>
(this, android.R.layout.simple_list_item_1,
tarefas.toArray(new String[] {})));
this.lvTarefa.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(final AdapterView<?> parent,
final View view, final int position, final long id)
{
Log.d(mvcView.APP_TAG, String.format("tarefa id: %d
e posição: %d", id, position));
mvcView.this.controller.deleteTarefa
(v.getText().toString());
mvcView.this.populaTarefas();
}
});
}
mvcView.this.controller.addTarefa(mvcView.this
.etNovaTarefa.getText().toString());
mvcView.this.populaTarefas();
}
};
@Override
protected void onStart()
6 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
{
super.onStart();
}
@Override
protected void onStop()
{
super.onStop();
}
}
O Controller liga a interface do usuário com os dados, mas também cria uma
camada de separação entre o Model e a View. Esta interface entre as duas
camadas fornece uma estrutura para o código expandir.
Listagem 3. mvcController.java
package com.devmedia.mvc;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import java.util.ArrayList;
import java.util.List;
7 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
if (c != null)
{
c.moveToFirst();
c.close();
}
return tarefas;
}
}
Uma tela splash screen deve permanecer aberta por determinado tempo para que
a aplicação consiga realizar algum processamento inicial. Enquanto isso, o usuário
pode ficar observando uma imagem ou mensagem na tela.
A seguir podemos visualizar a classe que atua como tela Splash da aplicação,
conforme mostrado na Listagem 4.
8 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
Listagem 4. mvcSplash.java
package com.devmedia.mvc;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
setContentView(R.layout.ui_splash);
timer.start();
}
}
9 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
Listagem 5. AndroidManifest.xml
</manifest>
Listagem 6. ui_main.xml
10 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
<RelativeLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id="@+id/widget31"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableRow
android:id="@+id/row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/lvTarefa"
android:orientation="horizontal" >
<EditText
android:id="@+id/etNovaTarefa"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text=""
android:textSize="18sp" >
</EditText>
<Button
android:id="@+id/btNovaTarefa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add_button_name" >
</Button>
</TableRow>
<ListView
android:id="@+id/lvTarefa"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
Listagem 7. ui_splash.xml
11 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/placekitten"
android:src="@drawable/splash"/>
</LinearLayout>
Listagem 8: strings.xml
</resources>
Até a próxima!
Um abraço.
Referências:
12 de 13 23/11/2017 12:04
Android MVC: Criando um Framework Model-View-Controller para ... http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29924
http://developer.android.com/guide/index.html
http://www.sqlite.org/
13 de 13 23/11/2017 12:04