package com.example.wang.blacklist;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.wang.blacklist.com.hanqi.blacklist.orm.BlackList;
import com.example.wang.blacklist.com.hanqi.blacklist.orm.BlackListDAO;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ListView lv_1;
//數據訪問對象
BlackListDAO bld=new BlackListDAO(this);
//數據集合
ArrayList<BlackList> alb;
BLAdapter bla;
//長按的數據的索引
int index;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_1=(ListView)findViewById(R.id.lv_1);
//獲取數據集合
alb=bld.getAll();
//顯示數據
//adapter
bla=new BLAdapter();
lv_1.setAdapter(bla);
//增長上下文菜單,設置建立菜單的監聽器
lv_1.setOnCreateContextMenuListener(this);
}
//重寫建立上下文菜單的方法
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, 1, 1, "修改");
menu.add(0, 2, 2, "刪除");
//獲取長按的數據信息
//1 獲得菜單信息
AdapterView.AdapterContextMenuInfo acmi =(AdapterView.AdapterContextMenuInfo)menuInfo;
//2 獲得數據在集合中的索引
index=acmi.position;
}
//響應菜單點擊的回調方法
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId())
{
case 1:
//修改
final EditText et=new EditText(this);
et.setText(alb.get(index).getPhoneNumber());
AlertDialog a=new AlertDialog.Builder(this)
.setTitle("修改黑名單")
.setView(et)
.setNegativeButton("取消", null)
.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//1.獲得新數據的實體類
//賦值 1)傳值; 複製新的值再傳遞,應用於值類型
// 2)傳址 傳遞的是內存地址,指向同一個對象,應用於引用類型
//1.1方法1
//BlackList blackList = new BlackList(alb.get(index).getId(),
// et.getText().toString());
//1.2 方法2
BlackList blackList = alb.get(index);
blackList.setPhoneNumber(et.getText().toString());
//2-調用DAO的update方法
if (bld.updata(blackList) > 0) {
Toast.makeText(MainActivity.this, "修改爲功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "修改失敗", Toast.LENGTH_SHORT).show();
}
//3-刷新ListView
//方法1
// alb=bld.getAll();
//方法2
// alb.remove(index);
// alb.add(index, blackList);
//刷新列表
bla.notifyDataSetChanged();
}
})
.show();
break;
case 2:
//刪除確認對話框
new AlertDialog.Builder(this)
.setTitle("肯定要刪除?")
.setPositiveButton("肯定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//刪除
if ( bld.delete(alb.get(index).getId())>0)
{
Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show();
//更新List
//方法1
//alb=bld.getAll();
//方法2
alb.remove(index);
//刷新列表
bla.notifyDataSetChanged();
}
else
{
Toast.makeText(MainActivity.this, "刪除失敗", Toast.LENGTH_SHORT).show();
}
}
})
.setNegativeButton("取消",null)
.show();
break;
}
return super.onContextItemSelected(item);
}
//添加按鈕的監聽器
public void add_OnClick(View v)
{
//自定義對話框
final EditText editText=new EditText(this);
editText.setHint("輸入電話號碼");
editText.setInputType(InputType.TYPE_CLASS_PHONE);
//構建對話框
AlertDialog al=new AlertDialog.Builder(this)
.setTitle("添加黑名單")
.setView(editText)
.setCancelable(false)
.setNegativeButton("取消", null)
.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//向數據庫保存
//1-定義實體類
BlackList blackList = new BlackList(editText.getText().toString());
//2-經過DAO插入數據
Long l=bld.insert(blackList);
if (l > 0) {
Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
//更新List
//方法1
//alb=bld.getAll();
//方法2
blackList.setId(l);
alb.add(0,blackList);
//刷新列表
bla.notifyDataSetChanged();
} else {
Toast.makeText(MainActivity.this, "保存失敗", Toast.LENGTH_SHORT).show();
}
}
})
.show();
}
//BaseAdapter 的實現類
class BLAdapter extends BaseAdapter
{
@Override
public int getCount() {
return alb.size();
}
@Override
public Object getItem(int position) {
return alb.get(position);
}
@Override
public long getItemId(int position) {
return alb.get(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//獲得數據
BlackList blackList=alb.get(position);
//獲得視圖
if (convertView==null)
{
//構建視圖
convertView=new TextView(MainActivity.this);
}
//視圖和數據作顯示匹配
TextView textView=(TextView)convertView;
textView.setText(blackList.getPhoneNumber());
textView.setTextSize(20);
textView.setHeight(80);
return convertView;
}
}
}