在做项目中,我想让listview只是在开始加载adapter的时候,调用setText这个方法,来显示textview上的文字(数据中数据库调用)。而后,我在长按item后,弹出一个对话框,
点击“编辑”。此时,会立马更新adapter,也就是重新调用getview。
点击确认后,会再次更新adapter,也就是重新调用getview。
也就是你如果setview的效果只会一闪而过。又会重新显示出之前,你在数据库中调用的数据。
解决办法:
你需要设置一个静态标志位变量aflag。初始化aflag=true;代码如下:
if(aflag){
holder.searchname.setText((String)list.get(position).get("showcontentname"));}
if (itemClicked&&count==position) {
holder.searchname.setText(changename);
itemClicked=false;
}
//长按处理
@Override
public boolean onItemLongClick(AdapterView<?> arg0, final View arg1, final int position,
long arg3) {
// TODO Auto-generated method stub
count=position;//保证你设置的item项是一一对应的
final Builder b=new AlertDialog.Builder(activity);
b.setTitle("请选择用户操作!").setItems(new String[]{"编辑","删除","连接"},
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
switch (which) {
case 0:
PopEditTextToChangeName(arg1,position);
break;
case 1:
break;
case 2:
break;
default:
break;
}
}
}).create().show();
return true;
}
下面是:弹出对话改名字:
/**
* 弹出编辑框来修改名字
* @param arg1
* @param position
*/
private void PopEditTextToChangeName(View arg1, final int position) {
// TODO Auto-generated method stub
View view=inflater.inflate(R.layout.hsp_editname, null);
//MyDiagClickListener myl=new MyDiagClickListener(view,arg1,position);
new AlertDialog.Builder(activity).setTitle("请输入修改账户!").setView(view)
.setPositiveButton("确定", new MyDiagClickListener(view,arg1,position)).setNegativeButton("取消",null).create()
.show();
}
最关键的标志位设置就在MyDiagListener(类中:
class MyDiagClickListener implements DialogInterface.OnClickListener{
private View view;
private View arg1;
private int position;
public MyDiagClickListener(View view, View arg1, int position) {
// TODO Auto-generated constructor stub
this.view=view;
this.arg1=arg1;
this.position=position;
}
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
EditText name=(EditText) view.findViewById(R.id.editname);
changename=name.getText().toString();
//Log.e("changename",changename);
if(changename.equals("")){
Toast toast=Toast.makeText(activity, "名字不能为空,请重新输入!", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP, 0, 450);
toast.show();
//break;
//changename=
}
else{
aflag=false;//此处设置为false
itemClicked=true;
//TextView settext;
//settext=(TextView)arg1.findViewById(R.id.hsp_favorite_displayname);
/*Message m=new Message();
m.what=3;
myHandlerMesage.sendMessage(m);*/
//settext.setText(changename.trim());
//this.notifyDataSetChanged();
UpDateShowContentName(position);
//flag=false;
}
//return true;
}
当然要记住,为了保证下次可以继续调用:
if(aflag){
holder.searchname.setText((String)list.get(position).get("showcontentname"));}
你必须在下次调用之前将aflag=true;
我是在调用这个adapter中的onCreate中设置的、代码如下:
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
HspfragfavoriteAdapter.aflag=true;
}