package com.example.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindListener;
public class FenleiHuizongActivity extends Activity {
//总列表
ArrayList> all=new ArrayList>();
//根据大类别分出来的表
ArrayList> leixing_expend;
ArrayList> leixing_income;
ArrayList> data=new ArrayList>();
private TableLayout mainTableLayout;
private boolean find;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_huizong);
mainTableLayout=(TableLayout)findViewById(R.id.mainTableLayout);
//这里的数据应该是从服务器取出来的
getAllData();
//通过总的列表对大的类型进行分类(支出)
leixing_expend=getLeixingExpend(all);
//通过总的列表对大的类型进行分类(收入)
// leixing_income=getLeixingIncome(all);
//动态加载大类型布局,同时分别再对大类型进行分类
AddLeixingView(leixing_expend);
// AddLeixingView(leixing_income);
//getDataByDate();
// 返回按钮
Button bt1 = (Button) findViewById(R.id.fanhui_huizong);
// 点击返回按钮跳转到分类查询界面
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FenleiHuizongActivity.this,
MingxiActivity.class);
FenleiHuizongActivity.this.startActivity(intent);
finish();
overridePendingTransition(0, R.layout.activity_close_exit);
}
});
ExitApplication.getInstance().addActivity(this);
}
/*
* 查询数据
*/
private void getAllData(){
//同样,在读取SharedPreferences数据前要实例化出一个SharedPreferences对象
SharedPreferences sp= getSharedPreferences("SP",
Activity.MODE_PRIVATE);
// 使用getString方法获得value,注意第2个参数是value的默认值
String name =sp.getString("USER_NAME", "");
BmobQuery<JiZhang> query = new BmobQuery<JiZhang>();
query.addWhereEqualTo("username", name);
query.setLimit(100);
query.findObjects(getApplicationContext(), new FindListener<JiZhang>() {
@Override
public void onSuccess(List<JiZhang> arg0) {
for(JiZhang jz:arg0){
Map<String, Object> item = new HashMap<String, Object>();
//日期
item.put("date", jz.getCreatedAt());
//收入
item.put("income", jz.getIncome());
//支出
item.put("expend", jz.getExpend());
//类别
item.put("leixing", jz.getLeixing());
//类型
item.put("type", jz.getType());
//ID
item.put("objectId", jz.getObjectId());
all.add(item);
}Toast.makeText(getApplicationContext(), "yes",
Toast.LENGTH_SHORT).show();
}
@Override
public void onError(int arg0, String arg1) {
Toast.makeText(getApplicationContext(), "查询失败",
Toast.LENGTH_SHORT).show();
}
});
}
/*
* 动态添加大类型布局
*/
private void AddLeixingView(ArrayList<Map<String, Object>> list) {
// TODO 自动生成的方法存根
for(int i=0;i<list.size();i++){
View itemView = LayoutInflater.from(FenleiHuizongActivity.this).inflate(R.layout.leixing_items, null);
LinearLayout mtableRow = (LinearLayout)itemView.findViewById(R.id.leixing_row);
TextView leixing_name=(TextView)itemView.findViewById(R.id.leixing_name);
final ImageView iv=(ImageView)itemView.findViewById(R.id.openimage);
final TableLayout leixingLayout = (TableLayout)itemView.findViewById(R.id.leixingLayout);
TextView money=(TextView)itemView.findViewById(R.id.money);
leixing_name.setText(list.get(i).get("leixing").toString());
if(Integer.valueOf(list.get(i).get("expend").toString())==0){
money.setText("+"+list.get(i).get("income").toString());
}else{
money.setText("-"+list.get(i).get("expend").toString());
//通过对总数据进行两次筛选,得到该大类的各个小类
AddTypeView(getTypeData(all,list.get(i).get("leixing").toString()),leixingLayout);
leixingLayout.setVisibility(View.GONE);
}
mtableRow.setOnClickListener(new OnClickListener() {
boolean down=true;
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
if(down){
down=false;
iv.setBackgroundResource(R.drawable.up_icon);
leixingLayout.setVisibility(View.VISIBLE);
}else{
down=true;
iv.setBackgroundResource(R.drawable.down_icon);
leixingLayout.setVisibility(View.GONE);
}
}
});
mainTableLayout.addView(mtableRow);
}
}
/*
* 动态添加小类别的布局
*/
private void AddTypeView(ArrayList<Map<String, Object>> list, TableLayout leixingLayout) {
// TODO 自动生成的方法存根
for(int i=0;i<list.size();i++){
View itemView = LayoutInflater.from(FenleiHuizongActivity.this).inflate(R.layout.leixing_type_items, null);
TableRow mtableRow = (TableRow)itemView.findViewById(R.id.typerow);
TextView leixing_name=(TextView)itemView.findViewById(R.id.type_name);
TextView money=(TextView)itemView.findViewById(R.id.money);
leixing_name.setText(list.get(i).get("type").toString());
money.setText(list.get(i).get("expend").toString());
leixingLayout.addView(mtableRow);
}
}
private ArrayList<Map<String, Object>> getTypeData(ArrayList<Map<String, Object>> list,String leixing) {
ArrayList<Map<String, Object>> data=new ArrayList<Map<String,Object>>();
Map<String, Object> map=new HashMap<String, Object>();
map.put("leixing", list.get(0).get("leixing").toString());
map.put("type", list.get(0).get("type").toString());
map.put("expend", list.get(0).get("expend").toString());
data.add(map);
for(int i=1;i<list.size();i++){
find=false;
for(int j=0;j<data.size();j++){
//null指针异常判断
if(data.get(j).get("type")==null||list.get(i).get("type")==null)continue;
//如果当前数据的小类型已存在data中,则对相同小类进行求和
if(data.get(j).get("type").toString().equals(list.get(i).get("type").toString())){
data.get(j).put("expend", ""+(Integer.valueOf(data.get(j).get("expend").toString())
+Integer.valueOf(list.get(i).get("expend").toString())));
j=data.size();
find=true;
}
}
if(!find)//如果当前数据的小类型不存在data中,则加入data中
{
Map<String, Object> map2=new HashMap<String, Object>();
map2.put("type", list.get(i).get("type").toString());
map2.put("leixing", list.get(i).get("leixing").toString());
map2.put("expend", list.get(i).get("expend").toString());
data.add(map2);
}
}
//对筛选而来的小类别列表根据当前大类进行再次分类,得到当前大类下所有小类的信息
ArrayList<Map<String, Object>> result=new ArrayList<Map<String,Object>>();
for(int i=0;i<data.size();i++){
if(data.get(i).get("leixing").toString().equals(leixing)){
result.add(data.get(i));
}
}
return result;
}
/*
* 支出类别
*/
private ArrayList<Map<String, Object>> getLeixingExpend(ArrayList<Map<String, Object>> list) {
ArrayList<Map<String, Object>> data=new ArrayList<Map<String,Object>>();
Map<String, Object> map=new HashMap<String, Object>();
if(list.size()==0){
Toast.makeText(getApplicationContext(), "list为0",
Toast.LENGTH_SHORT).show();
}else{
map.put("leixing", list.get(0).get("leixing").toString());
map.put("expend", list.get(0).get("expend").toString());
//map.put("income", list.get(0).get("income").toString());
data.add(map);
for(int i=1;i<list.size();i++){
find=false;
for(int j=0;j<data.size();j++){
//Log.v("TAG", data.get(j).get("leixing").toString()+":"+list.get(i).get("leixing").toString());
if(data.get(j).get("leixing")==null||list.get(i).get("leixing")==null)continue;
//如果当前数据的大类型已存在data中,则对相同大类进行求和
if(data.get(j).get("leixing").toString().equals(list.get(i).get("leixing").toString())){
data.get(j).put("expend", ""+(Integer.valueOf(data.get(j).get("expend").toString())
+Integer.valueOf(list.get(i).get("expend").toString())));
//data.get(j).put("income", ""+(Integer.valueOf(data.get(j).get("income").toString())
// +Integer.valueOf(list.get(i).get("income").toString())));
j=data.size();
find=true;
}
}
if(!find) //如果当前数据的大类型不存在data中,则加入data中
{
Map<String, Object> map2=new HashMap<String, Object>();
map2.put("leixing", list.get(i).get("leixing").toString());
map2.put("expend", list.get(i).get("expend").toString());
//map2.put("income", list.get(i).get("income").toString());
data.add(map2);
}
}}
return data;
}
}