2011-11-16 6 views
4

J'ai du mal à obtenir des fragments pour mettre à jour leurs vues ... Plus précisément, les fragments qui existent dans un ViewPager avec ActionBarSherlock.Android Fragment Problems

Voici ma classe de fragment:

public class SearchFragment extends Fragment{ 
private String mInterests; 
private String mSentence; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.bounty_search_layout, container, false); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    getUserInterests(); 
} 

/* 
* Get the users interests from the underlying 
* data store. 
*/ 
public void getUserInterests() { 
    TextView tv = (TextView) getView().findViewById(R.id.bounty_search_txtResult); 
    DatabaseHelper dbHelper = new DatabaseHelper(getActivity()); 
    SQLiteDatabase db = dbHelper.getReadableDatabase(); 

    Cursor cursor = db.query(DatabaseConstants.TABLE_NAME, null, null, null, null, null, null); 
    cursor.moveToFirst(); 
    mInterests = cursor.getString(cursor.getColumnIndex(DatabaseConstants.INTERESTS)); 
    if(mInterests.length() == 0) { 
     mSentence = "You have no interests."; 
    } 
    else { 
     mSentence = "Your interests are: "; 
     mInterests = cursor.getString(cursor.getColumnIndex(DatabaseConstants.INTERESTS)); 
    } 
    tv.setText(mSentence + mInterests); 
    cursor.close(); 
    db.close(); 
    dbHelper.close(); 
} 
} 

La façon dont j'appelle ce fragment de mon FragmentActivity est dans ce qui suit ...

SearchFragment searchInterests = new SearchFragment(); 

Mes vues dans le fragment sont correctement configuré quand il s'exécute en premier, mais quand j'appelle quelque chose comme ...

searchInterests.update(); 

de la FragmentActivity, à mettre à jour certaines vues, le getView() de

TextView tv = (TextView) getView().findViewById(R.id.results); 

renvoie null et échoue. J'ai du mal à comprendre pourquoi c'est ... Quelqu'un m'avait dit que c'est parce que mon fragment n'est attaché à rien ... Je ne comprends pas bien cette partie et pas seulement ça mais je ne comprends tout simplement pas pourquoi getView() points à null si onCreateView a réussi la première fois? Ne pas getView() obtient la vue retournée par onCreateView? Voici le jeu complet de code: https://gist.github.com/1369653

Répondre

3

Alors après un certain temps, je me suis dehors ... problème provenait de la façon dont le FragmentPagerAdapter retournait le fragment ...

@Override 
public Fragment getItem(int position) { 
    return Fragment.instantiate(mContext, mTabs.get(position), null); 
} 

Ce fut un retour NOUVEAU fragment chaque fois que getItem() a été appelé. Cependant, j'avais aussi ...

searchInterests = new SearchFragment(); 
selectInterests = new SelectFragment(); 

Qui créait un nouveau fragment avant qu'il ne soit ajouté à l'adaptateur. L'adaptateur recevait donc un nouveau fragment ET renvoyait un nouveau fragment au lieu de renvoyer le même que celui que je lui ai donné. Donc j'ai simplement changé la fonction getItem() pour retourner un nouveau fragment si aucun de la même classe n'existe déjà.