j essaye de réaliser une application pour des lessons de langue norvegiane
je veux utliser une liste qui affiche un ensempble de verbs puis afficher le detail de chaque verb avec une main navigation drawer
j ai trouver une solution avec une class MasterDetailFragmentHelper reference
http://www.michenux.net/android-navi...rawer-748.html
mais j ai toujours le problem de LoaderCallbacks , quand je click sur la touche back , je quit l application sans erreurs au lieux de retourner sur la liste des verbs
voila le code
MasterDetailFragmentHelper
class MasterDetailFragments
class FriendMainFragment
class FriendListFragment
class FriendDetailFragment
je veux utliser une liste qui affiche un ensempble de verbs puis afficher le detail de chaque verb avec une main navigation drawer
j ai trouver une solution avec une class MasterDetailFragmentHelper reference
http://www.michenux.net/android-navi...rawer-748.html
mais j ai toujours le problem de LoaderCallbacks , quand je click sur la touche back , je quit l application sans erreurs au lieux de retourner sur la liste des verbs
voila le code
MasterDetailFragmentHelper
Code:
import android.content.res.Configuration;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import java.util.ArrayList;
import java.util.List;
public class MasterDetailFragmentHelper {
public static MasterDetailFragments getCurrentFragments( int masterView, int detailView, Class<? extends Fragment> detailClass,
FragmentManager fm ) {
MasterDetailFragments masterDetailFragments = new MasterDetailFragments();
List<Fragment> fragmentToRemove = new ArrayList<Fragment>();
Fragment frag1 = fm.findFragmentById(masterView);
if ( frag1 != null ) {
if ( detailClass.isAssignableFrom(frag1.getClass())) {
masterDetailFragments.detail = frag1;
fm.popBackStackImmediate();
fragmentToRemove.add(frag1);
frag1 = fm.findFragmentById(masterView);
masterDetailFragments.master = frag1;
fragmentToRemove.add(frag1);
}
else {
masterDetailFragments.master = frag1;
fragmentToRemove.add(frag1);
}
}
Fragment frag2 = fm.findFragmentById(detailView);
if ( frag2 != null ) {
fragmentToRemove.add(frag2);
if ( masterDetailFragments.detail == null ) {
masterDetailFragments.detail = frag2 ;
}
}
FragmentTransaction ft = fm.beginTransaction();
for( Fragment f : fragmentToRemove ) {
ft.remove(f);
}
ft.commit();
fm.executePendingTransactions();
return masterDetailFragments ;
}
public static void initFragments( MasterDetailFragments fragments, int masterView, int detailView, Configuration configuration, FragmentManager fm ) {
boolean dualPanel = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE;
if (dualPanel) {
FragmentTransaction ft = fm.beginTransaction();
ft.add(masterView, fragments.master);
if ( fragments.detail != null ) {
ft.add(detailView, fragments.detail);
}
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
} else {
FragmentTransaction ft = fm.beginTransaction();
ft.add(masterView, fragments.master);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
if ( fragments.detail != null ) {
ft = fm.beginTransaction();
ft.add(masterView, fragments.detail);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
}
}
}class MasterDetailFragments
Code:
import android.support.v4.app.Fragment;
public class MasterDetailFragments {
public Fragment master ;
public Fragment detail ;
}Code:
public class FriendMainFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(false);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragm_main, container, false);
MasterDetailFragments currentFragments = MasterDetailFragmentHelper
.getCurrentFragments(R.id.fragmmain_fragment,
R.id.fragmdetail_fragment, FriendDetailFragment.class,
getChildFragmentManager());
if ( currentFragments.master == null ) {
currentFragments.master = FriendListFragment.newInstance();
}
MasterDetailFragmentHelper.initFragments(currentFragments, R.id.fragmmain_fragment,
R.id.fragmdetail_fragment, getResources().getConfiguration(), getChildFragmentManager());
return view ;
}
}Code:
public class FriendListFragment extends ListFragment implements
LoaderManager.LoaderCallbacks<Cursor> ,TextToSpeech.OnInitListener{
private TextToSpeech tts;
private TextView txtos;
/**
*
*/
private SimpleCursorAdapter adapter;
/**
*
*/
private boolean dualPanel;
/**
* @return
*/
public static FriendListFragment newInstance() {
FriendListFragment frag = new FriendListFragment();
// Bundle args = new Bundle();
// frag.setArguments(args);
return frag;
}
/**
* {@inheritDoc}
*
* @see android.support.v4.app.ListFragment#onCreateView(android.view.LayoutInflater,
* android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mainView = inflater.inflate(R.layout.fragmlist, container, false);
fillData();
return mainView;
}
/**
* {@inheritDoc}
*
* @see android.support.v4.app.Fragment#onActivityCreated(android.os.Bundle)
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
tts = new TextToSpeech(getActivity(), null);
this.dualPanel = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
}
/**
*
*/
private void fillData() {
String[] from = new String[] {
MyTables.ID_VERB_COL,
MyTables.ID_PAGE_COL,
MyTables.VERB_COL,
MyTables.TEMP1_COL,
MyTables.V_IMAG_COL
};
int[] to = new int[] {
R.id.tx_list_id_verb,
R.id.tx_list_id_page,
R.id.tx_list_verb,
R.id.tx_list_temp1,
R.id.list_image
};
this.getLoaderManager().initLoader(0, null, this);
this.adapter = new SimpleCursorAdapter(this.getActivity(),
R.layout.verb_row, null, from, to, 0);
this.adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View paramView, Cursor paramCursor,
int paramInt) {
if (paramView.getId() == R.id.list_image) {
String faceName = CursorUtils.getString(MyTables.V_IMAG_COL, paramCursor);
String friendName = CursorUtils.getString(MyTables.VERB_COL, paramCursor);
//Drawable face = ResourceUtils.getDrawableByName(faceName, FriendListFragment.this.getActivity());
//face.setBounds( 0, 0, 70, 70 );
//TextView textView = (TextView) paramView;
//textView.setText(faceName);
//ImageView displayImage = (ImageView) paramView;
ImageView image=(ImageView) paramView.findViewById(R.id.list_image);
//image.setImageResource(getActivity().getResources().getIdentifier("com.app.norsksprak.tarik:drawable/"+MyTables.V_IMAG_COL,null,null));
image.setImageDrawable( ResourceUtils.getDrawableByName( faceName, getActivity()));
//textView.setCompoundDrawablePadding(10);
//textView.setCompoundDrawables(face, null, null, null);
return true;
}
return false;
}
});
this.setListAdapter(this.adapter);
}
/**
* {@inheritDoc}
*
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onCreateLoader(int,
* android.os.Bundle)
*/
public Loader<Cursor> onCreateLoader(int arg0, Bundle bundle) {
String[] projection = { MyTables.ID_VERB_COL,
MyTables.ID_PAGE_COL,
MyTables.VERB_COL,
MyTables.TEMP1_COL,
MyTables.TEMP2_COL,
MyTables.TEMP3_COL,
MyTables.TRAD_COL,
MyTables.EXEMPL_COL,
MyTables.V_IMAG_COL,
MyTables.VAR1_COL
};
CursorLoader cursorLoader = new CursorLoader(this.getActivity(),
MyContentProvider.CONTENT_URI, projection, null, null, null);
return cursorLoader;
}
/**
* {@inheritDoc}
*
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished(android.support.v4.content.Loader,
* Object)
*/
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
this.adapter.swapCursor(cursor);
}
/**
* {@inheritDoc}
*
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset(android.support.v4.content.Loader)
*/
public void onLoaderReset(Loader<Cursor> cursor) {
this.adapter.swapCursor(null);
}
@Override
public void onResume() {
super.onResume();
if ( this.getListView().getSelectedView() != null ) {
ensureVisible(this.getListView(),
this.getListView().getSelectedView());
}
}
private void ensureVisible(ListView parent, View view) {
parent.smoothScrollToPosition(parent.getSelectedItemPosition());
// Rect rect = new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
// parent.requestChildRectangleOnScreen(view, rect, false);
}
/**
* {@inheritDoc}
*
* @see android.support.v4.app.ListFragment#onListItemClick(android.widget.ListView,
* android.view.View, int, long)
*/
@Override
public void onListItemClick(ListView listView, View view, int position,
long id) {
txtos = (TextView) view.findViewById(R.id.tx_list_temp1);
speakOut();
super.onListItemClick(listView, view, position, id);
Uri detailUri = Uri.parse(MyContentProvider.CONTENT_URI + "/" + id);
FriendDetailFragment detailFragment = FriendDetailFragment
.newInstance(detailUri);
if (!this.dualPanel) {
FragmentHelper.initFragmentWithBackstack(detailFragment,
R.id.fragmmain_fragment, this.getParentFragment().getChildFragmentManager());
} else {
FragmentHelper.initFragment(detailFragment,
R.id.fragmdetail_fragment, this.getParentFragment().getChildFragmentManager());
}
}
@Override
public void onDestroy() {
// Don't forget to shutdown!
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
}
@Override
public void onInit(int status) {
// TODO Auto-generated method stub
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.getDefault());
// tts.setPitch(5); // set pitch level
// tts.setSpeechRate(2); // set speech speed rate
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "Language is not supported");
} else {
speakOut();
}
} else {
Log.e("TTS", "Initilization Failed");
}
}
private void speakOut() {
String text = txtos.getText().toString();
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}Code:
public class FriendDetailFragment extends Fragment {
private Uri detailUri;
private TextView VerbField;
private TextView TempVField ;
private ImageView ImagField ;
/**
* @return
*/
public static FriendDetailFragment newInstance() {
FriendDetailFragment frag = new FriendDetailFragment();
return frag;
}
/**
* @param detailUri
* @return
*/
public static FriendDetailFragment newInstance(Uri detailUri) {
FriendDetailFragment frag = new FriendDetailFragment();
Bundle args = new Bundle();
args.putParcelable(MyContentProvider.CONTENT_ITEM_TYPE, detailUri);
frag.setArguments(args);
return frag;
}
/**
* {@inheritDoc}
*
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
* android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mainView = inflater.inflate(R.layout.fragmdetail, container,
false);
this.VerbField = (TextView) mainView
.findViewById(R.id.friend_name_value);
this.TempVField = (TextView) mainView
.findViewById(R.id.friend_job_value);
this.ImagField = (ImageView) mainView
.findViewById(R.id.friend_face_value);
this.detailUri = (savedInstanceState == null) ? null
: (Uri) savedInstanceState
.getParcelable(MyContentProvider.CONTENT_ITEM_TYPE);
Bundle extras = getArguments();
if (extras != null && this.detailUri == null) {
this.detailUri = extras
.getParcelable(MyContentProvider.CONTENT_ITEM_TYPE);
}
if (this.detailUri != null) {
fillData(this.detailUri);
}
return mainView;
}
/**
* @param uri
*/
private void fillData(Uri uri) {
String[] projection = { MyTables.ID_VERB_COL,
MyTables.ID_PAGE_COL,
MyTables.VERB_COL,
MyTables.TEMP1_COL,
MyTables.TEMP2_COL,
MyTables.TEMP3_COL,
MyTables.TRAD_COL,
MyTables.EXEMPL_COL,
MyTables.V_IMAG_COL,
MyTables.VAR1_COL};
Cursor cursor = this.getActivity().getContentResolver()
.query(uri, projection, null, null, null);
if (cursor != null) {
try {
cursor.moveToFirst();
this.VerbField
.setText(
CursorUtils.getString(MyTables.VERB_COL, cursor));
this.TempVField
.setText(CursorUtils.getString(MyTables.TEMP1_COL, cursor));
String faceImg = CursorUtils.getString(MyTables.V_IMAG_COL, cursor);
this.ImagField.setImageDrawable(
ResourceUtils.getDrawableByName(
faceImg, this.getActivity()));
} finally {
cursor.close();
}
}
}
/**
* @param selectedItemUri
*/
public void update(Uri selectedItemUri) {
this.detailUri = selectedItemUri;
fillData(this.detailUri);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(MyContentProvider.CONTENT_ITEM_TYPE,
this.detailUri);
}
public Uri getDetailUri() {
return detailUri;
}
}
Aucun commentaire:
Enregistrer un commentaire