0

sqllite データベースが変更されたとき (クエリを削除または更新したとき) にリストビューを更新しようとしています。クエリ自体は問題なく動作しますが、アクティビティを終了してレンタルした場合にのみ、リストビューのレイアウトは更新されません。ライセビューが変化しています。

メソッドを試しました:

  1. notifyDataSetChanged()
  2. 再クエリ()

活動のコードは次のとおりです。

public class ShowListActivity extends ListActivity {


    private ItemsDataSource itemsDataSource;
    private String source[] = new String[] {MySQLiteHelper.KEY_NAME, MySQLiteHelper.KEY_QUANTITY, MySQLiteHelper.KEY_CHECKED};
    private int dest[] = new int[] {R.id.itemTitle, R.id.itemQuantity, R.id.itemCheck};


    public void goBackMethod(View view) {
        Intent intent = new Intent(this, MainScreen.class);
        startActivity(intent);  
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            setContentView(R.layout.activity_show_list);
        } catch (Exception e) {
            e.getMessage();
        }


        ApplicationController applicationController = (ApplicationController)getApplicationContext();
        itemsDataSource = applicationController.itemsDataSource;


        final Cursor mCursor = itemsDataSource.getAllItems();
        startManagingCursor(mCursor);


        CustomCursorAdapter adapter = new CustomCursorAdapter(this, mCursor);
        adapter.notifyDataSetChanged();
        setListAdapter(adapter);

      ListView listView = getListView();

      listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
                selectAction(id);
            }
        });
    }

    private void selectAction(final long position) {
        Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("בחר פעולה");
        builder
                .setMessage("בחר בפעולה שברצונך לבצע:");
        builder.setPositiveButton("עדכן פריט קניה",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                       //do update
                    }
                });

        builder.setNeutralButton("מחק פריט קניה",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                         itemsDataSource.deleteItem(position);
                         Toast toast = Toast.makeText(getBaseContext(), "הפריט הנבחר נמחק בהצלחה", Toast.LENGTH_SHORT);
                         toast.show();               
                    }
                });

        builder.setNegativeButton("חזור לרשימת הקניות",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();

                    }
                });
        AlertDialog alertDialog = builder.create();
        alertDialog.show();       
    }
}

customadapter のコードは次のとおりです。

public class CustomCursorAdapter extends CursorAdapter implements Adapter {
private Cursor mCursor;
private Context mContext;
private final LayoutInflater mInflater;


public CustomCursorAdapter(Context context, Cursor c) {
    super(context, c);
    mInflater=LayoutInflater.from(context);
    mContext=context;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {

    TextView itemTitle= (TextView)view.findViewById(R.id.itemTitle);
    itemTitle.setText(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.KEY_NAME)));

    TextView itemQuantity = (TextView)view.findViewById(R.id.itemQuantity);
    itemQuantity.setText(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.KEY_QUANTITY)));

    CheckBox itemCheck = (CheckBox) view.findViewById(R.id.itemCheck);
    itemCheck.setChecked(cursor.getInt(cursor.getColumnIndex(MySQLiteHelper.KEY_CHECKED))==1);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    final View view=mInflater.inflate(R.layout.listview_item_row, parent, false);

    TextView itemTitle= (TextView)view.findViewById(R.id.itemTitle);
    itemTitle.setText(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.KEY_NAME)));

    TextView itemQuantity = (TextView)view.findViewById(R.id.itemQuantity);
    itemQuantity.setText(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.KEY_QUANTITY)));

    CheckBox itemCheck = (CheckBox) view.findViewById(R.id.itemCheck);
    itemCheck.setChecked(cursor.getInt(cursor.getColumnIndex(MySQLiteHelper.KEY_CHECKED))==1);

    return view;
}

}

4

1 に答える 1

0

コードにアダプター クラスを追加していません。配列リストからリスト ビューにデータを追加すると確信しています。

リストビューにデータを追加または削除してリストビューを更新するときは、最初に配列リストからデータを追加または削除し、次のように呼び出します

listView.invalidateViews();
then call your set Adapter method
于 2012-10-28T09:24:51.720 に答える