package com.android_mvc.sample_project.activities.func_db;
import java.util.List;
import android.graphics.Color;
import android.view.View;
import android.view.View.OnClickListener;
import com.android_mvc.sample_project.common.Util;
import com.android_mvc.sample_project.controller.FuncDBController;
import com.android_mvc.sample_project.db.dao.FriendDAO;
import com.android_mvc.sample_project.db.entity.Friend;
import com.android_mvc.framework.activities.base.BaseNormalActivity;
import com.android_mvc.framework.ui.UIBuilder;
import com.android_mvc.framework.ui.view.MButton;
import com.android_mvc.framework.ui.view.MLinearLayout;
import com.android_mvc.framework.ui.view.MTextView;
/**
* サンプルのDB参照アクティビティ。
* @author id:language_and_engineering
*
*/
public class DBListActivity extends BaseNormalActivity {
MLinearLayout layout1;
MTextView tv1;
MTextView tv2;
// 全友達のリスト
List<Friend> friends;
@Override
public boolean requireProcBeforeUI(){
// UI構築前に処理を要求する
return true;
}
// UI構築前に別スレッドで実行される処理
@Override
public void procAsyncBeforeUI(){
//
Util.d("UI構築前に実行される処理です。");
// 全FriendをDBからロード
friends = new FriendDAO(this).findAll();
}
@Override
public void defineContentView() {
final DBListActivity activity = this;
// まず親レイアウトを定義
new UIBuilder(context)
.add(
layout1 = new MLinearLayout(context)
.orientationVertical()
.widthFillParent()
.heightWrapContent()
.add(
tv1 = new MTextView(context)
.text("ここにDBの中身が列挙されます。" )
.widthWrapContent()
.paddingPx(10)
,
tv2 = new MTextView(context)
.invisible()
.textColor(Color.RED)
.widthWrapContent()
.paddingPx(10)
)
)
.display();
// レイアウト内に動的に全友達の情報を表示。Adapterは不要。
for( final Friend f : friends )
{
// ※↑friendをfinal宣言してるのは,Clickイベントの中から参照する事が目的
// お気に入り状態を反転するボタン
String favorite_button_text = (f.getFavorite_flag()) ? "お気に入り解除" : "お気に入り登録";
layout1.add(
// 水平方向のレイアウトを1個追加
new MLinearLayout(context)
.orientationHorizontal()
.widthFillParent()
.heightWrapContent()
.paddingPx(10)
.add(
new MTextView(context)
.text( f.getDescription() ) // この友達の説明を取得
.widthWrapContent()
,
new MButton(context)
.text(favorite_button_text)
.click(new OnClickListener(){
@Override
public void onClick(View v) {
// DB更新へ
FuncDBController.submit(activity, "UPDATE_FAVORITE_FLAG", f.getId());
}
})
,
new MButton(context)
.text("削除")
.click(new OnClickListener(){
@Override
public void onClick(View v) {
// DBから削除へ
FuncDBController.submit(activity, "DELETE_FRIEND", f.getId());
}
})
)
);
}
// 戻るボタン
layout1.add(
new MButton(context)
.text("トップに戻る")
.click(new OnClickListener(){
@Override
public void onClick(View v) {
FuncDBController.submit(activity, "BACK_TO_TOP", null);
}
})
);
// 描画
layout1.inflateInside();
// 友達登録操作の直後の場合
if( $.hasActionResult() )
{
showRegisteredNewFriend();
}
}
// 新規登録されたばかりの新しい友達情報を表示
private void showRegisteredNewFriend() {
if( $.actionResultHasKey( "new_friend_obj" ) )
{
// Intentから情報を取得
Friend f = (Friend)($.getActionResult().get("new_friend_obj"));
// UIに表示
tv2.text(f.getName() + "さんが,たった今新規登録されました。").visible();
}
}
}