0

ここSOにはリストビューを更新するための多くの提案があることを知っています。それらを試しましたが、何も機能しません。手伝ってくれませんか?何かを逃したかどうかはわかりません。これが私のコードです:

simpleAdapterConsumerList= new ConsumerList(RegistrationActivity.this, arraylistRegisteredConsumer, R.layout.registeredconsumerlistattributecell, Constants.REGISTERED_ATTRIBUTE_KEYS, Constants.REGISTERED_ATTRIBUTES_VIEWS, false);
        lv_ConsumersList.setAdapter(simpleAdapterConsumerList);
        registeredConsumerCount = lv_ConsumersList.getCount();

送信ボタンをクリックすると、ページを離れることなくリスビューを自動的に更新したいと考えています。リストビューをクリックすると、ユーザーが選択したアイテムを削除するかどうかを尋ねる警告ダイアログが表示されます。ユーザーが [OK] ボタンをクリックすると、データベースで既に削除されていますが、リストビューは更新されません。更新されたリストビューを表示するには、ページを離れる必要があります。以下にコードを入力しようとしましたが、何も機能しません。()

simpleAdapterConsumerList.notifyDataSetChanged(); 

((BaseAdapter) lv_ConsumersList.getAdapter()).notifyDataSetChanged();

データベースに新しいデータを追加する私のコードをここに示します

btn_Register.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            Emp = txt_Emp.getText().toString();
            Lastname = txt_Lname.getText().toString();
            Firstname = txt_Fname.getText().toString();
            Middlename = txt_Mname.getText().toString();
            Cp = txt_Cp.getText().toString();
            Email = txt_Email.getText().toString();
            fullName = Lastname +" "+ Firstname +" "+Middlename;
            careFriend = sharedPreferences.getString(Constants.SHARED_PREFERENCES_CAREFRIEND, "");  
            companyName = sharedPreferences.getString(Constants.SHARED_PREFERENCES_COMPANY_CARE_FRIEND, "");
            consumercompanycode =  sharedPreferences.getString(Constants.SHARED_PREFERENCES_COMPANYCODE_CARE_FRIEND, "");
            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm");
            emailmark = "Not send";
            consumerId = sharedPreferences.getInt(Constants.SHARED_PREFERENCES_CONSUMER_ID, 1);
            consumerId = consumerId + 1;
            if (!Lastname.equals(""))
            {
                ....
{
                            String currentDateandTime = sdf.format(new Date());
                            databaseAdapter.SaveConsumerDetails(new Constructor(Emp, Lastname, Firstname, Middlename, Cp, Email, fullName, careFriend, companyName, emailmark, currentDateandTime, consumerId, consumercompanycode));
                            sharedPreferencesEditor.putInt(Constants.SHARED_PREFERENCES_CONSUMER_ID, consumerId);
                            sharedPreferencesEditor.commit();
                            simpleAdapterConsumerList.notifyDataSetChanged();
                            //((BaseAdapter) lv_ConsumersList.getAdapter()).notifyDataSetChanged(); 
                            //registeredConsumerCount = lv_ConsumersList.getCount();
                            Toast.makeText(RegistrationActivity.this, "Registered successfully. " + currentDateandTime, Toast.LENGTH_LONG).show();                                                                          simpleAdapterConsumerList.notifyDataSetChanged();
                            Clear();

                        }else{
          ....          
        }

私の削除ボタンで。ここに私のコードがあります

public void onClick(DialogInterface dialog, int id) 
                {
                    databaseAdapter.deleteSelectedItem(ID);
                    Toast.makeText(RegistrationActivity.this, "Delete " + ID, Toast.LENGTH_LONG).show();                                                                            
                    simpleAdapterConsumerList.notifyDataSetChanged();
                }

....
final Cursor cursorRegisteredConsumer = databaseAdapter.getCursorRegisteredConsumer();

   ....
//on my databaseAdapter here is my code

public Cursor getCursorRegisteredConsumer(){
    Cursor c = dbSqlite.query(Constants.DATABASE_TABLE_CONSUMER, new String[] { Constants.DATABASE_COLUMN_ID, Constants.CONSUMER_EMPNO, Constants.CONSUMER_FIRSTNAME, Constants.CONSUMER_LASTNAME, Constants.CONSUMER_MIDDLEINITIAL, Constants.CONSUMER_CELLPHONENO, Constants.CONSUMER_EMAIL, Constants.CONSUMER_FULLNAME, Constants.CONSUMER_CAREFRIEND, Constants.CONSUMER_COMPANY, Constants.CONSUMER_REGISTRATIONDATE, Constants.CONSUMER_EMAILMARK,Constants.CONSUMER_ID,Constants.CONSUMER_COMPANYCODE}, null , null, null, null, Constants.DATABASE_COLUMN_ID + " ASC");
    //c.setNotificationUri(getContext().getContentResolver(), uri);
    if (c != null) {
        c.moveToFirst();
    }
    return c;

}
4

4 に答える 4

0

notifyDataSetChanged() を呼び出す前に、Adapter が参照するConsumerListを更新する必要があります。
あなたのコードから、ListAdapter または彼のサブクラスを使用したと思います。他の API レベルについてはテストしていませんが、API レベル 16(JELLY_BEAN) は ListAdapter.notifyDataSetChanged() について機能しないと思います。そのため、BaseAdapter を使用することをお勧めします。

于 2013-06-05T02:12:44.947 に答える
0

カーソル アダプタを扱う場合swapCursor()は、更新されたカーソルを呼び出して渡す必要があります。次に、 を呼び出しますnotifyDataSetChanged

于 2013-06-05T00:49:50.897 に答える