OnListItemClick not working in ListFragment

0

The Toast of the onListItemClick method never appears, does anyone know what I did wrong? Code:

public class TiposFragment extends ListFragment  {
private ArrayList<Tipo> tipos;
private TipoAdapter tipoAdapter;
private int selecionado;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    try {
        Bundle bundle = getArguments();
        if (bundle != null) {
            tipos = bundle.getParcelableArrayList("tipos");
        }


    } catch (Exception e) {
        Toast.makeText(getContext(), e.toString(), Toast.LENGTH_LONG).show();
    }

    if (tipos != null) {
        try {
            tipoAdapter = new TipoAdapter(getContext(), tipos);
            setListAdapter(tipoAdapter);

            ListView listaTipos = getListView();
            listaTipos.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
           // Toast.makeText(getContext(),String.valueOf(listaTipos.getCount()),Toast.LENGTH_LONG).show();

        } catch (Exception e) {
            Toast.makeText(getContext(), e.toString(), Toast.LENGTH_LONG).show();
        }

    }

}

@Override
public void onListItemClick(ListView lv, View v, int position, long id) {
    super.onListItemClick(lv, v, position, id);
    selecionado = tipoAdapter.getItem(position).tipCod;
    Toast.makeText(getContext(), String.valueOf(selecionado), Toast.LENGTH_SHORT).show();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_tipo_trilha, container, false);
    return view;
}
    
asked by anonymous 05.05.2017 / 02:43

2 answers

0

Try to do this:

public class TiposFragment extends ListFragment  {
    private ArrayList<Tipo> tipos;
    private TipoAdapter tipoAdapter;
    private int selecionado;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        try {
            Bundle bundle = getArguments();
            if (bundle != null) {
                tipos = bundle.getParcelableArrayList("tipos");
            }
        } catch (Exception e) {
            Log.d("TAG", e.toString());
            // desnecessário mostrar o erro no app, use log para ver no console
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_tipo_trilha,     container, false);
        // se voce passou o parametro corretamente para o bundle,
        // dificilmente irá precisar de um bloco try ... catch
        // se precisar, é só implementar ai de novo
        tipoAdapter = new TipoAdapter(getContext(), tipos);
        setListAdapter(tipoAdapter);

        ListView listaTipos = getListView();
        listaTipos.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        listaTipos.setOnListItemClick(this);
        // muita atenção nessa linha, eu prefiro montar os meus proprios adapters.
        // por isso vc precisa verificar corretamente isso, mas o que deve estar faltando é isso
        // é através desse comando que o listview sabe onde 
        // procurar o listener do click, 
        // sem isso, ele nunca vai ser disparado
        return view;
    }

    @Override
    public void onListItemClick(ListView lv, View v, int position, long id) {
        super.onListItemClick(lv, v, position, id);
        selecionado = tipoAdapter.getItem(position).tipCod;
        Toast.makeText(getContext(), String.valueOf(selecionado),    Toast.LENGTH_SHORT).show();
    }
}

Try this, if it gives problems, let me know ...

    
05.05.2017 / 03:24
0

Solved! just add the line android:focusable="false" in the xml of the fragment

    
05.05.2017 / 15:27