本文共 8973 字,大约阅读时间需要 29 分钟。
==========系统方法实现上啦刷新=========
public class GreatToolsActivity extends Activity { private TextView tv; private ListView listtest; private LinearLayout lt; private TestSmsSafeAdapt adp; private ArrayListoneStr; @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 ();//更新的数据 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 Listinfos; 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会覆盖子类控件而直接获取焦点。
转载地址:http://htmgi.baihongyu.com/