cursorLoader incompatibilita' v4
EDIT: Funziona
Nella main class invece di getSupportFragmentManager,ho usato getFragmentManager
poi ho cambiato
initLoader(0, null, this) a intLoader(0,null, (LoaderCallbacks<Cursor>) this
Ciao non riesco ad usare initLoader il problema principale e' che non accetta come terzo parametro this
se non levando gli imports e mettendo le librerie support v4, ma a quel punto non posso piu' ritornare un cursore, e mi fa implementare nuovi metodi l'interfaccia che in OnLoaderStart non mi fanno ritornare un CursorLoader, cosi faccio a meno dei v4 imports, ma ottengo un errore che non riesco a spiegarmi nella main class, cercando in giro ho trovato che gli import potrebbero essere sbagliati, ma sono giorni che provo senza successo.
Uso android studio intellij e la minsdk e' 11
grazie
Quote:
Error21, 21) error: no suitable method found for add(int,FragmentAsList)
method FragmentTransaction.add(int,Fragment,String) is not applicable
(actual and formal argument lists differ in length)
method FragmentTransaction.add(int,Fragment) is not applicable
(actual argument FragmentAsList cannot be converted to Fragment by method invocation conversion)
method FragmentTransaction.add(Fragment,String) is not applicable
(actual argument int cannot be converted to Fragment by method invocation conversion)
codice:
import android.app.LoaderManager;
import android.content.ContentValues;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.SimpleCursorAdapter;
import android.text.format.Time;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import ivano.android.com.ucanote.ivano.android.com.ucanote.db.Db;
import ivano.android.com.ucanote.ivano.android.com.ucanote.db.UcanContentProvider;
import ivano.android.com.ucanote.ivano.android.com.ucanote.db.UcanContract;
public class FragmentAsList extends Fragment implements View.OnCreateContextMenuListener,LoaderManager.LoaderCallbacks<Cursor> {
private SimpleCursorAdapter myCursorAdapter;
//brought out from OnCreateView, have to be in all the class
List<String> tasks = new ArrayList<String>();
ListView listView;
Time today = new Time(Time.getCurrentTimezone());
Db myDb;
EditText etTasks;
public FragmentAsList() {
super();
}
public void populateView() {
//TODO FIRSTclean the class and see if you have to get rid of the query in populate view()
getLoaderManager().initLoader(0, null, this);
// String[] projection ={UcanContract.Tasks._ID,UcanContract.Tasks.COLUMN_TASKS};
//Cursor cursor=getActivity().getContentResolver().query(UcanContentProvider.CONTENT_URI,projection,null,null,null);
String[] fromFieldNames = new String[]{UcanContract.Tasks._ID,UcanContract.Tasks.COLUMN_TASKS};
int[] toViewId = new int[]{R.id.text_v1,R.id.text_v2};
myCursorAdapter=new SimpleCursorAdapter(getActivity(),R.layout.textview_pretty_cool2_layout,null,fromFieldNames,toViewId,0);
listView.setAdapter(myCursorAdapter);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add this line in order for this fragment to handle menu events.
setHasOptionsMenu(true);
//open Database
myDb = new Db(getActivity());
myDb.open();
}
@Override
public String toString() {
return super.toString();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_fragmentaslist, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// // Handle action bar item clicks here. The action bar will
// // automatically handle clicks on the Home/Up button, so long
// // as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (id) {
case R.id.add:
Intent intent_comunicate = new Intent(getActivity(), DetailNote.class);
intent_comunicate.putExtra(getActivity().getPackageName(), "CIao Cipollino");
startActivityForResult(intent_comunicate, 123);
break;
case R.id.delete_all:
registerForContextMenu(listView);
getActivity().getContentResolver().delete(UcanContentProvider.CONTENT_URI, null, null);
populateView();
}
return super.onOptionsItemSelected(item);
}
@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();
today.setToNow();
String timeCurrent = today.format("%Y-%m-%d %H:%M:%S");
registerForContextMenu(listView);
ContentValues values = new ContentValues();
values.put(UcanContract.Tasks.COLUMN_TASKS, string);
getActivity().getContentResolver().insert(UcanContentProvider.BASE_CONTENT_URI, values);
// myDb.insertRow(string, timeCurrent, null, null);
//database query
populateView();
}
}
@Override
public View onCreateView(LayoutInflater inflater, @nullable ViewGroup container, @nullable Bundle savedInstanceState) {
View hiddenList = inflater.inflate(R.layout.fragment_as_list_layout, container, false);
listView = (ListView) hiddenList.findViewById(R.id.list_hidden);
registerForContextMenu(listView);
populateView();
/
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);
}
});
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) {
registerForContextMenu(listView);
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int index = info.position;
Uri uri = Uri.parse(UcanContentProvider.CONTENT_URI + "/"
+ info.id);
String where = String.valueOf(info.id);
switch (item.getItemId()) {
case R.id.delete:
getActivity().getContentResolver().delete(uri, where, null);
populateView();
break;
case R.id.edit:
break;
case R.id.share:
break;
}
return super.onContextItemSelected(item);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] projection ={UcanContract.Tasks._ID,UcanContract.Tasks.COLUMN_TASKS};
CursorLoader cl = new CursorLoader(getActivity(), UcanContentProvider.CONTENT_URI, projection, null, null, null);
return cl;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
myCursorAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
myCursorAdapter.swapCursor(null);
}
e la main class
codice:
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_layout);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.framebig, new FragmentAsList())
.commit();
}
}//end on Create
@Override
public boolean onCreateOptionsMenu (Menu menu){
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item){
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}