package com.piglet.ui; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TableLayout; import android.widget.TableLayout.LayoutParams; import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; import com.piglet.App; import com.piglet.R; import com.piglet.utils.Constant; import com.piglet.utils.UnitConverter; import com.piglet.widget.TwoDScrollView; import com.umeng.analytics.MobclickAgent; public class DataActivity extends Activity implements OnClickListener { private String tablename; private TableLayout table; private TwoDScrollView tds; private List<Map<String, Object>> rows; private TextView tips; private int curpage = 1; private int totalrecords = 0; private int totalpage = 0; private int pagesize = 20; private ProgressBar progressBar; private ImageView first; private ImageView pre; private ImageView next; private ImageView last; private TextView status; public static final int WHAT_DATA_RETURNED = 0; public static final int WHAT_DATA_EMPTY = 1; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case Constant.value.WHAT_DATA_RETURNED: tips.setVisibility(View.GONE); progressBar.setVisibility(View.GONE); rows = (List<Map<String, Object>>) msg.obj; totalrecords = msg.arg1; totalpage = (int) Math.ceil(totalrecords * 1f / pagesize); refreshUi(); break; case Constant.value.WHAT_DATA_EMPTY: tips.setText(R.string.empty_databases); progressBar.setVisibility(View.GONE); break; case Constant.value.WHAT_FAILED_TO_CONNECT: progressBar.setVisibility(View.GONE); tips.setText(R.string.fail_to_connect); break; } super.handleMessage(msg); } }; /** * Called when the activity is first created. * * @param savedInstanceState * If the activity is being re-initialized after previously being * shut down then this Bundle contains the data it most recently * supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it * is null.</b> */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_data); tablename = getIntent().getStringExtra(Constant.key.TABLE); tips = (TextView) findViewById(R.id.tips); tips.setText(R.string.show_db_working); progressBar = (ProgressBar) findViewById(R.id.progressbar); table = (TableLayout) findViewById(R.id.table); tds = (TwoDScrollView) findViewById(R.id.tds); first = (ImageView) findViewById(R.id.first); pre = (ImageView) findViewById(R.id.pre); next = (ImageView) findViewById(R.id.next); last = (ImageView) findViewById(R.id.last); first.setOnClickListener(this); pre.setOnClickListener(this); next.setOnClickListener(this); last.setOnClickListener(this); status = (TextView) findViewById(R.id.status); initData(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(com.piglet.R.menu.main, menu); return true; } private void initData() { progressBar.setVisibility(View.VISIBLE); App.get().queryTable(tablename, curpage, pagesize, handler); } private void refreshUi() { status.setText(String.format(getString(R.string.data_status), curpage, totalpage, totalrecords)); table.removeAllViews(); if (rows != null && !rows.isEmpty()) { int padding = UnitConverter.dip2px(this, 10); TableRow rowhead = new TableRow(this); for (final Map.Entry<String, Object> entry : rows.get(0).entrySet()) { TextView tv = new TextView(this); tv.setText(entry.getKey() + ""); tv.setPadding(padding, padding, padding, padding); tv.setBackgroundResource(R.drawable.rectbghead); tv.setTextAppearance(getApplicationContext(), R.style.base_text_title); tv.setTextColor(0xff000000); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "标题" + entry.getKey(), Toast.LENGTH_LONG).show(); } }); rowhead.addView(tv, new TableRow.LayoutParams(-2, -1)); } TableLayout.LayoutParams paramshead = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); table.addView(rowhead, paramshead); int i = 0; for (Map<String, Object> map : rows) { TableRow row = new TableRow(this); i++; final int ci = i; int j = 0; for (final Map.Entry<String, Object> entry : map.entrySet()) { TextView tv = new TextView(this); j++; final int cj = j; tv.setText(entry.getValue() + ""); tv.setPadding(padding, padding, padding, padding); tv.setBackgroundResource(R.drawable.rectbg); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String value = entry.getValue() == null ? "null" : entry.getValue().toString(); Toast.makeText(getApplicationContext(), "(" + ci + "," + cj + ")" + value, Toast.LENGTH_LONG).show(); } }); row.addView(tv, new TableRow.LayoutParams(-2, -1)); } TableLayout.LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); table.addView(row, params); } } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.first: curpage = 1; if (totalpage > 1) { pre.setEnabled(false); next.setEnabled(true); } break; case R.id.pre: if (curpage > 1) { curpage--; } if (curpage == 1) { pre.setEnabled(false); } if (curpage == totalpage - 1) { next.setEnabled(true); } break; case R.id.last: curpage = totalpage; if (totalpage > 1) { pre.setEnabled(true); next.setEnabled(false); } break; case R.id.next: if (curpage < totalpage) { curpage++; } if (curpage == totalpage) { next.setEnabled(false); } if (curpage == 2) { pre.setEnabled(true); } break; } initData(); } public void onResume() { super.onResume(); MobclickAgent.onResume(this); } public void onPause() { super.onPause(); MobclickAgent.onPause(this); } }