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?
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
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