==========系统方法实现上啦刷新=========
public class GreatToolsActivity extends Activity {
private TextView tv;
private ListView listtest;
private LinearLayout lt;
private TestSmsSafeAdapt adp;
private ArrayList<String> oneStr;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_greatetools);
TextView tv = findViewById(R.id.tv_guishudi);
tv.setClickable(true);
//手机号码归属地的textView的点击事件
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(GreatToolsActivity.this, NuberAdressActivty.class);
startActivity(intent);
}
});
//********************listview分批加载数据测试******************
oneStr = new ArrayList<String >();//更新的数据
for (int m=0;m<5;m++){
oneStr.add(m+"");
}
lt = findViewById(R.id.nowLoading);
listtest = findViewById(R.id.listtest);
loadingListview();//加载数据
//给listview注册滚动事件的监听器
listtest.setOnScrollListener(new AbsListView.OnScrollListener() {
//当滚动的状态发生变化的时候
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
switch (i) {
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
Log.e("scroll", "空闲状态");
//判断当前listview的位置
int lastposition = listtest.getLastVisiblePosition();//获取最后一个可见条目在所有数据集合中的位置
Log.e("scroll", "空闲状态"+lastposition);
if (lastposition == oneStr.size() - 1) {
//列表被移动到最后的位置,加载更过数据
for (int n = 0; n < 2; n++) {
if(oneStr.size()+n<100) {
oneStr.add((oneStr.size() + 1)+"");
}
}
loadingListview();//刷新listview
}
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
Log.e("scroll", "手指触摸状态");
break;
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
Log.e("scroll", "惯性滑行状态");
break;
}
}
// 滚动的时候
@Override
public void onScroll(AbsListView absListView, int i, int i1, int i2) {
}
});
}
//********加载数据
private void loadingListview() {
lt.setVisibility(View.VISIBLE);//设置转圈的布局可见
if (adp == null) {
adp = new TestSmsSafeAdapt();
}
lt.setVisibility(View.INVISIBLE);//设置转圈的布局不可见
listtest.setAdapter(adp);
}
private class TestSmsSafeAdapt extends BaseAdapter {
@Override
public int getCount() {
return oneStr.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
//有多少个条目,这个方法就会被调用多少次
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
final View v;
if (view != null) {
v = view;
} else {
v = View.inflate(getApplicationContext(), R.layout.listtestitem, null);
tv = (TextView) v.findViewById(R.id.list_testitemtv);
}
tv.setText(oneStr.get(i));
return v;
}
}
}
============更新listView的数据==========
public class CallSmsSafeActivty extends Activity {
private TextView tv_blackname;
private ListView lst_blackname;
private List<BlackNumberInfo> infos;
private BlacknameDao dao;
private CallSmsSafeAdapt adp;
private Button adblackBtn;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.callsmssafe_activity);
tv_blackname = findViewById(R.id.tv_blackname);
lst_blackname = findViewById(R.id.lst_blackname);
dao = new BlacknameDao(this);
infos = dao.findAll();
adp = new CallSmsSafeAdapt();
lst_blackname.setAdapter(adp);
adblackBtn =(Button)findViewById(R.id.addblacknameBtn);
adblackBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addblacknameClick(view);//点击天加按钮
}
});
}
private class CallSmsSafeAdapt extends BaseAdapter {
private viewHolder holder;
@Override
public int getCount() {
return infos.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
//有多少个条目,这个方法就会被调用多少次
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
final View v;
if (view != null) {
v = view;
holder = (viewHolder) v.getTag();
} else {
v = View.inflate(getApplicationContext(), R.layout.list_callblackname_item, null);
holder = new viewHolder();
holder.tv = (TextView) v.findViewById(R.id.list_blackname_item);
v.setTag(holder);
}
holder.tv.setText(infos.get(i).getNumber());
AlertDialog.Builder bu=new AlertDialog.Builder(CallSmsSafeActivty.this);//注意这里不能用getApplicationContext(),对话框只能用this,this代表当前的activity;
bu.setTitle("警告");
bu.setMessage("确定给取消");
bu.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//删除
holder.image=v.findViewById(R.id.image_blackname_item);
holder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//删除数据
dao.delete(infos.get(i).getNumber());
//通知适配器更新listview
adp.notifyDataSetChanged();
}
});
}
});
bu.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
bu.show();
return v;
}
}
//记事本存储textview的内存地址
class viewHolder {
private TextView tv;
private ImageView image;
}
private EditText enterbalckname;
private Button cancelBtn;
private Button sureBtn;
//添加黑名单按钮,弹出dialog
public void addblacknameClick(View view) {
Log.e("addblack","d");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final AlertDialog dialog = builder.create();
View contentview = View.inflate(this, R.layout.dialog_enterblackname, null);
dialog.setView(contentview, 0, 0, 0, 0);
dialog.show();
//
enterbalckname = findViewById(R.id.et_enterblackname);
cancelBtn = findViewById(R.id.enterBlacknamecancelclick);
sureBtn = findViewById(R.id.enterBlacknamesureclick);
sureBtn.setOnClickListener(new View.OnClickListener() {
@SuppressLint("WrongConstant")
@Override
public void onClick(View view) {
String blackname = enterbalckname.getText().toString().trim();
if (TextUtils.isEmpty(blackname)) {
// 电话不能为空
Toast.makeText(getApplicationContext(), "号码不能为空", 1);
return;
}
//吧数据加到数据库
dao.add(blackname);
//更新listView
BlackNumberInfo info=new BlackNumberInfo();
info.setNumber(blackname);
infos.add(info);
//通知listview数据适配器更新
adp.notifyDataSetChanged();
dialog.dismiss();
}
});
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
}
}
listview.setDevice(null);//分割线设置为null
listview.setverticalscrollbarEnabled(false);//设置垂直方向不能滚动;
item和button点击事件冲突的解决:
android:descendantFocusability="blocksDescendants"
如果ListView的item中包含了button等同样需要点击事件监听的控件时,系统在默认情况下使item中的事件监听的控件获取焦点,使ListView失去焦点,导致无法响应setOnItemClickListener()方法。
那么添加的这个属性是什么意思呢?
descendantFocusability属性是当一个view获取焦点时,定义viewGroup和其子控件之间的关系。该属性的值有三种:beforeDescendants:viewGroup会优先其子控件而获取到焦点。
afterDescendants:viewGroup只有当子类控件不需要获取焦点时才获取焦点。
blocksDescendants:viewGroup会覆盖子类控件而直接获取焦点。