1

アクティビティを拡張するアンチティビティがあります。このアクティビティには、SQliteデータベースからクエリを実行するデータを表示するリストビューがあります。リストビューのアイテムの1つをロングクリックすると、アラートダイアログが表示され、本当に削除したいかどうかを確認します。しかし、データの1つを削除すると、データベースからデータを再度クエリし、notifyDataSetChanged()リストビューを更新するために使用しますが、機能しません。onCreate()にいくつかのコードがあります

serviceListView.setOnItemLongClickListener(new OnItemLongClickListener()
    {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,final int arg2, long arg3)
        {
            Map<String, String> map = new HashMap<String, String>();
            if (data!=null)
            {
                String[] options = new String[]{ "edit", "delete" };
                map = data.get(arg2);
                final String companyname= map.get("companyname");
                final String serviceaddress = map.get("serveraddress");
                final String id = map.get("id");
                new AlertDialog.Builder(ServiceListActivity.this)
                        .setTitle("options")
                        .setIcon(android.R.drawable.ic_dialog_info)
                        .setSingleChoiceItems(options,-1,
                                new DialogInterface.OnClickListener()
                                {
                                    public void onClick(DialogInterface dialog,int which)
                                    {
                                        if (which == 0)
                                        {
                                            dialog.dismiss();
                                            Toast.makeText(ServiceListActivity.this, id+companyname+serviceaddress+"edit", Toast.LENGTH_SHORT).show();
                                        }
                                        else
                                        {       
                                            dialog.dismiss();
                                            AlertDialog.Builder builder = new Builder(ServiceListActivity.this);
                                            builder.setMessage("delete?");
                                            builder.setTitle("Notice");
                                            builder.setPositiveButton("yes", new DialogInterface.OnClickListener()
                                            {
                                                @Override
                                                public void onClick(DialogInterface dialog, int which)
                                                {
                                                    // TODO Auto-generated method stub
                                                    Log.i("ServiceListActivity data1 = ", data.size()+"");
                                                    dialog.dismiss();
                                                    Message message = Message.obtain();
                                                    message.what = 1;
                                                    message.obj = id;
                                                    messageHandler.sendMessage(message);                                                    
                                                }
                                            });
                                            builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog,int which)
                                                {
                                                    // TODO Auto-generated method stub
                                                    dialog.dismiss();
                                                }
                                            });
                                            builder.create().show();
                                        }
                                    }
                                }).setNegativeButton("no", new DialogInterface.OnClickListener()
                                {       
                                    @Override
                                    public void onClick(DialogInterface dialog, int which)
                                    {
                                        // TODO Auto-generated method stub
                                        dialog.dismiss();
                                    }
                                })
                        .show();

インタークラスがあります:

class MessageHandler extends Handler
 {
        public MessageHandler(Looper looper) 
        {
            super(looper);
        }

        @Override
        public void handleMessage(Message msg)
        {
            switch (msg.what) 
            {
            case 1:         
                String id = msg.obj.toString();
                int i = DatabaseTools.DeleteServer(database, Integer.parseInt(id));
                if (i==1)
                {
                    data = DatabaseTools.queryDataFromDatabase(database,cursor);
                    Log.i("ServiceListActivity data2 = ", data.size()+"");
                    myListAdapter.notifyDataSetChanged();
                    Toast.makeText(ServiceListActivity.this, "finished", Toast.LENGTH_SHORT).show();
                }   
                break;
            }
        }

私はこれを修正することができないので、誰かが私を助けてください、どうもありがとうございました。

4

1 に答える 1

3

このように呼んでみてください:

runOnUiThread(new Runnable() {
     public void run() {
         myListAdapter.notifyDataSetChanged();
     }
});

アップデート :

このRunnableをハンドラーのどこかで宣言します。

Runnable run = new Runnable(){
     public void run(){
         myListAdapter.notifyDataSetChanged();
     }
};

次に、ハンドラーからこれを呼び出します。

yourActivity.runOnUiThread(run);

ハンドラーから呼び出していると問題が発生していると思います。

これで問題が解決することを願っています。

ありがとう。

于 2012-12-08T07:25:34.753 に答える