Ciaosono bloccato
su un comando lanciato da un context menu, che dovrebbe cancellare la riga nel database e ricaricare le righe in list view.
questa e' la classe con il context menu comando delete(accorciata che non entrava)
e questo il database su cui viene eseguito il comando delete row e dopo getallrowscodice:@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 123) { String string = data.getExtras().getString(getActivity().getPackageName()); Log.d("FragmentAsList", "stringa dall altra activity: " + string); Toast.makeText(getActivity(), string, Toast.LENGTH_LONG).show(); ///database insert today.setToNow(); String timeCurrent = today.format("%Y-%m-%d %H:%M:%S"); myDb.insertRow(string, timeCurrent, null, null); //database query Cursor cursor = myDb.getallRows(); String[] fromFieldNames = new String[]{Db.ROW_TASK}; int[] toViewId = new int[]{R.id.text_row}; SimpleCursorAdapter myCursorAdapter; myCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.textview_pretty_cool, cursor, fromFieldNames, toViewId, 0); listView.setAdapter(myCursorAdapter); } } @Override public View onCreateView(LayoutInflater inflater, @nullable ViewGroup container, @nullable Bundle savedInstanceState) { View hiddenList = inflater.inflate(R.layout.fragment_as_list, container, false); //We are inside a fragment, we have to speak with the compiler ! registerForContextMenu(listView); Cursor cursor = myDb.getallRows(); String[] fromFieldNames = new String[]{Db.ROW_TASK}; int[] toViewId = new int[]{R.id.text_row}; SimpleCursorAdapter myCursorAdapter; myCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.textview_pretty_cool, cursor, fromFieldNames, toViewId, 0); listView.setAdapter(myCursorAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d("ivano.android.com.ucanote.FragmentAsList", "onItemClick (line 115): tocca posizione: " + position); //TODO make a new activity where you have a causal motivational thing etc // Intent explicitIntent =new Intent(getActivity(),DetailNote.class); // startActivity(explicitIntent); } }); return hiddenList; } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater mi = getActivity().getMenuInflater(); mi.inflate(R.menu.context_menu, menu); } @Override public boolean onContextItemSelected(MenuItem item) { Log.d("ivano.android.com.ucanote.FragmentAsList", "onContextItemSelected (line 148): toccato"); switch (item.getItemId()) { case R.id.delete: //TODO delete registerForContextMenu(listView); AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); long index = info.position; Log.d("ivano.android.com.ucanote.FragmentAsList", "onContextItemSelected (line 160): the position is " + index); //TODO first content provider myDb.deleteRow(index); Cursor cursor = myDb.getallRows(); String[] fromFieldNames = new String[]{Db.ROW_TASK}; int[] toViewId = new int[]{R.id.text_row}; SimpleCursorAdapter myCursorAdapter; myCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.textview_pretty_cool, cursor, fromFieldNames, toViewId, 0); listView.setAdapter(myCursorAdapter); break; case R.id.edit: break; case R.id.share: break; } return super.onContextItemSelected(item); } }
codice:package ivano.android.com.ucanote.ivano.android.com.ucanote.db; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by ivano on 4/8/2015. */ public class Db { private static final String TAG="Db"; //TODO check if all the fields are used, // expecially TAG, ALL KEYS and columns, and what is the function of DB info? //fields public static final String ROW_ID = "_id"; public static final String ROW_TASK = "task"; public static final String ROW_DATE = "date"; public static final String ROW_URGENCY = "urgency"; public static final String ROW_TAG= "tag"; public static final String[] ALL_ROWS=new String[]{ROW_ID,ROW_TASK,ROW_DATE,ROW_URGENCY,ROW_TAG}; //Columns public static final int COL_ID = 0; public static final int COL_TASK = 1; public static final int COL_DATE = 2; public static final int COL_URGENCy = 3; public static final int COL_TAG=4; //DB info public static final String DATABASE_NAME = "db"; public static final String DATABASE_TABLE="table1"; //always remember to change this if I are going to update the DB! public static final int DATABASE_VERSION=1; //create private static final String DATABASE_CREATE_SQL= "CREATE TABLE " + DATABASE_TABLE + " (" + ROW_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, " +ROW_TASK+ " TEXT NOT NULL, " +ROW_DATE+ " TEXT, " +ROW_URGENCY+" TEXT, " +ROW_TAG+" TEXT " + " );"; private final Context context; private DatabaseHelper myDBHelper; private SQLiteDatabase db; public Db (Context ctx) { this.context = ctx; myDBHelper=new DatabaseHelper(context); } public Db open() { db= myDBHelper.getWritableDatabase(); return this; } public void close(){ myDBHelper.close(); } public long insertRow (String task,String date, String urgency, String tag) { ContentValues initialValues = new ContentValues(); initialValues.put(ROW_TASK, task); initialValues.put(ROW_DATE, date); initialValues.put(ROW_URGENCY, urgency); initialValues.put(ROW_TAG, tag); return db.insert(DATABASE_TABLE,null,initialValues); } //delete a row from the db by _id public boolean deleteRow(long rowId) { String where =ROW_ID+"="+ rowId; return db.delete(DATABASE_TABLE,where,null) != 0; } public void deleteAll(){ Cursor c=getallRows(); long rowId=c.getColumnIndex(ROW_ID); if (c.moveToFirst()) { do { deleteRow(c.getLong((int) rowId)); } while (c.moveToNext()); } c.close(); } public Cursor getallRows(){ String where=null; Cursor c=db.query(true,DATABASE_TABLE,ALL_ROWS,where,null,null,null,null,null); if (c!= null){ c.moveToFirst(); } return c; } public Cursor getRow(long rowId){ String where =ROW_ID+"=" +rowId; Cursor c=db.query(true,DATABASE_TABLE,ALL_ROWS,where,null,null,null,null,null); if(c!= null){ c.moveToFirst(); } return c; } public boolean updateRow(long rowId,String task,String date, String urgency,String tag){ String where =ROW_ID+"="+rowId; ContentValues newValues =new ContentValues(); newValues.put(ROW_TASK,task); newValues.put(ROW_DATE, date); newValues.put(ROW_URGENCY, urgency); newValues.put(ROW_TAG, tag); return db.update(DATABASE_TABLE,newValues,where,null)!=0; } private static class DatabaseHelper extends SQLiteOpenHelper{ DatabaseHelper(Context context){ super (context,DATABASE_NAME,null,DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE_SQL); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG,"Upgrading application's database from version" +oldVersion+ " to "+newVersion+ " ,which will destroy all the old data!"); db.execSQL("DROP TABLE IF EXISTS "+DATABASE_TABLE); onCreate(db); } } }

LinkBack URL
About LinkBacks
sono bloccato
su un comando lanciato da un context menu, che dovrebbe cancellare la riga nel database e ricaricare le righe in list view.
Ultima modifica di ndrokki; 14-04-15 alle
Rispondi quotando