0

J'ai un problème pour essayer de faire en sorte que mon application Android puisse suivre les entrées de l'utilisateur lorsque je configure un adaptateur spécifique. Donc, dans ma classe de fragments, j'ai cette fonction qui est ramassée quand le fragment est ramassé dans l'activité.Android ListFragment L'adaptateur n'autorise pas les clics de l'utilisateur

@Override 
public void onListItemClick(ListView l, View v, int pos, long id) { 
    System.out.println("clicked"); 
    // Indicates the selected item has been checked 
    getListView().setItemChecked(pos, true); 

    // Inform the QuoteViewerActivity that the item in position pos has been selected 
    mListener.onListSelection(pos); 
} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.i(TAG, getClass().getSimpleName() + ":entered onCreate()"); 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    Log.i(TAG, getClass().getSimpleName() + ":entered onCreate()"); 
    return super.onCreateView(inflater, container, savedInstanceState); 
} 

public void onActivityCreated(Bundle savedState) { 
    Log.i(TAG, getClass().getSimpleName() + ":entered onActivityCreated()"); 
    super.onActivityCreated(savedState); 


    dbHelper= new dbHelper(getActivity()); 
    Cursor cursor = dbHelper.selectJoinDecksQuestions("jjj"); 
    cursor.moveToFirst(); 
    setListAdapter(new QuestionCursorAdapter(getActivity(), cursor)); 

} 

qui appelle l'adaptateur et renseigne sur l'écran avec les données renvoyées par le curseur dans une liste de vues de texte. Le problème est qu'aucune de ces données n'est sélectionnable.

Si je change la méthode onActivityCreated pour ressembler à ces données sont affichées et est sélectionnable:

public void onActivityCreated(Bundle savedState) { 
    Log.i(TAG, getClass().getSimpleName() + ":entered onActivityCreated()"); 
    super.onActivityCreated(savedState); 

    Set the list adapter for the ListView 
    Discussed in more detail in the user interface classes lesson 
    setListAdapter(new ArrayAdapter<String>(getActivity(), 
      R.layout.question_fragment, MainContentActivity.mTitleArray)); 
} 

L'adaptateur problème ressemble à ce

public QuestionCursorAdapter(Context context, Cursor c) { 
    // that constructor should be used with loaders. 
    super(context, c, 0); 
    inflater = LayoutInflater.from(context); 
    System.out.println("leaving constructor of the questioncursoradapter"); 
    System.out.println(getCount()); 
} 


@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    System.out.println("in bind view"); 
    TextView list_item = (TextView)view.findViewById(R.id.question_in_list); 
    list_item.setText(cursor.getString(cursor.getColumnIndex(COLUMN_NAME_QUESTIONTEXT))); 
    list_item.setMovementMethod(new ScrollingMovementMethod()); 
    int position = cursor.getPosition(); // that should be the same position 

    System.out.println("leaving bind view");*/ 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    System.out.println("newView in QuestionCursorAdapter entered"); 
    //question_fragment/cusoradaptertest 
    View v = inflater.inflate(R.layout.question_fragment, null); 
    System.out.println("leave newview"); 
    return v; 

} 

Toute réflexion sur la raison pour laquelle la ArrayAdapter retourne les données est sélectionnable où mon CursorAdapter personnalisé ne fonctionne pas?

+0

Toujours aux prises avec cela. Je pense que c'est un problème avec la façon dont j'essaie d'utiliser l'écouteur de clic. J'ai remplacé onListItemClick dans la classe de fragment mais je ne suis pas sûr si, puisque c'est un adapteur fait sur commande, j'ai besoin de créer un nouveau dans l'adapteur? – massphoenix

+0

Donc, je définis un écouteur dans l'adaptateur et il enregistre les clics. Je suppose que la prochaine chose à faire ici serait d'écrire quelques rappels qui poussent les clics vers l'activité principale de l'adaptateur. Je voudrais saisir si c'est une bonne façon de le faire ou cela devrait tous être mis dans le fragment ou s'il n'y a pas de réelle différence. – massphoenix

Répondre

0

J'ai donc mis en place le clicklistener dans l'adaptateur et tout a bien fonctionné! La seule autre chose que je devais faire était de permettre au fragment de transmettre son activité à l'adaptateur afin que l'activité principale puisse être rappelée à partir de là. J'espère que ce n'est pas une performance inférieure, mais il semble faire le travail, donc je vais définir la réponse ici au cas où quelqu'un d'autre vient à travers cela.