ExpandableListView avec plusieurs choix enregistrer l'élément sélectionné dans un tableau

J'ai un tableau rempli de données API et j'ai une vue extensible pour afficher les éléments de ce tableau. Maintenant, ce que j'essaie de faire, c'est quand l'utilisateur clique sur un élément qu'il enregistre l'ID de cet élément dans un tableau , Donc si l'utilisateur sélectionne 2 éléments, je veux 2 Ids dans mon tableau, ce qui se passe maintenant, c'est ceci: peu importe si je ne sélectionne qu'un des éléments, il les enregistre et les enregistre dans mon tableau.

public class MainActivity extends Fragment { private ExpandListAdapter ExpAdapter; private ExpandableListView ExpandList; private Button notificar; private Context context; MainActivity mContext; private Button footer; private double RaioEscola; private CircleOptions mCircle; GPSTracker tracker; private Location location; private Integer IdEscola; public MainActivity() { } public MainActivity(Context context) { this.context = context; } @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.expand, container, false); ExpandList = (ExpandableListView) rootView.findViewById(R.id.exp_list); notificar = (Button) rootView.findViewById(R.id.btnGetMoreResults); new asyncTask(MainActivity.this).execute(); return rootView; } private class asyncTask extends AsyncTask<String, Void, Void> { private ProgressDialog pd; public asyncTask(MainActivity context) { mContext = context; pd = new ProgressDialog(getActivity()); pd.setTitle("Por Favor Espere ..."); pd.setMessage("Enviando ..."); if (!pd.isShowing()) { pd.show(); } } @Override protected Void doInBackground(final String... params) { try { String[] resposta = new WebService().get("filhos"); if (resposta[0].equals("200")) { JSONObject mJSONObject = new JSONObject(resposta[1]); JSONArray dados = mJSONObject.getJSONArray("data"); /* cria o array que vai receber os dados da api */ final ArrayList<Escolas> mArrayList = new ArrayList<Escolas>(); /* percorre o array, adicionando cada linha encontrada em um ArrayList */ for (int i = 0; i < dados.length(); i++) { JSONObject item = dados.getJSONObject(i); Escolas mEscolas = new Escolas(); mEscolas.setId_escola(item.optInt("id_escola")); mEscolas.setCnpj(item.getString("cnpj")); mEscolas.setRazao_social(item.getString("razao_social")); mEscolas.setNome_fantasia(item.getString("nome_fantasia")); mEscolas.setDistancia(Float.valueOf(item.getString("distancia"))); mEscolas.setLogradouro(item.optString("logradouro")); mEscolas.setNumero(item.optString("numero")); mEscolas.setBairro(item.getString("bairro")); mEscolas.setComplemento(item.getString("complemento")); mEscolas.setCep(item.getString("cep")); mEscolas.setCidade(item.getString("cidade")); mEscolas.setEstado(item.getString("estado")); mEscolas.setLatitude(Float.parseFloat(item.getString("latitude"))); mEscolas.setLongitude(Float.parseFloat(item.getString("longitude"))); RaioEscola = Double.parseDouble(String.valueOf(mEscolas.getDistancia())); IdEscola = mEscolas.getId_escola(); JSONObject alunos = item.optJSONObject("alunos"); JSONArray data = alunos.getJSONArray("data"); if (data != null) { ArrayList<Filhos> arrayalunos = new ArrayList<Filhos>(); for (int a = 0; a < data.length(); a++) { Filhos mFilhos = new Filhos(); JSONObject clientes = data.getJSONObject(a); mFilhos.setId_aluno(clientes.optInt("id_aluno")); mFilhos.setNome(clientes.optString("nome")); mFilhos.setSobrenome(clientes.optString("sobrenome")); mFilhos.setFoto(clientes.optString("foto")); mFilhos.setModalidade_de_ensino(clientes.optString("modalidade_de_ensino")); mFilhos.setObservacoes(clientes.optString("observacoes")); arrayalunos.add(mFilhos); } mEscolas.setalunos(arrayalunos); } /* popula o array de viagens */ mArrayList.add(mEscolas); ExpAdapter = new ExpandListAdapter(getActivity(), mArrayList); getActivity().runOnUiThread(new Runnable() { @Override public void run() { ExpandList.setAdapter(ExpAdapter); ExpAdapter.notifyDataSetChanged(); ExpAdapter.setChoiceMode(ExpandListAdapter.CHOICE_MODE_MULTIPLE); ExpandList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(final ExpandableListView parent, View v, final int groupPosition, final int childPosition, final long id) { ExpAdapter.setClicked(groupPosition, childPosition); final int index = parent.getFlatListPosition(ExpandableListView.getPackedPositionForChild(groupPosition, childPosition)); parent.setItemChecked(index, true); parent.setSelectedChild(groupPosition, childPosition, true); parent.getChildAt(index); notificar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { class update extends TimerTask { public void run() { try { getActivity().runOnUiThread(new Runnable() { @Override public void run() { final float latitude = mArrayList.get(groupPosition).getLatitude(); final float longitude = mArrayList.get(groupPosition).getLongitude(); LatLng latLng = new LatLng(latitude, longitude); drawMarkerWithCircle(latLng); GPSTracker gps = new GPSTracker(getActivity()); double latitudegps = gps.getLatitude(); double longitudegps = gps.getLongitude(); float[] distance = new float[2]; Location.distanceBetween(mCircle.getCenter().latitude, mCircle.getCenter().longitude, latitudegps, longitudegps, distance); if (distance[0] > mCircle.getRadius()) { Toast.makeText(getActivity(), "Outside", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getActivity(), "Inside", Toast.LENGTH_LONG).show(); AlertRest mAlertRest = new AlertRest(); try { List<Integer> myIdList = new ArrayList<Integer>(); for (int i = 0; i < mArrayList.get(groupPosition).getalunos().size(); i++) { Integer Idalunos = mArrayList.get(groupPosition).getalunos().get(i).getId_aluno(); myIdList.add(Idalunos); } mAlertRest.getNotificacao(1, mArrayList.get(groupPosition).getId_escola(), String.valueOf(myIdList), latitudegps, longitudegps); } catch (Exception e) { e.printStackTrace(); } } } }); } catch (Exception e) { e.printStackTrace(); } } } Timer timer = new Timer(); timer.schedule(new update(), 0, 15000); } private void drawMarkerWithCircle(LatLng position) { mCircle = new CircleOptions().center(position).radius(RaioEscola); } }); return false; } }); } }); } /* retorna um array de objetos */ } else { throw new Exception("[" + resposta[0] + "] ERRO: " + resposta[1]); } } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void cursor) { if (pd.isShowing()) { pd.dismiss(); } } } } 

AlertRest:

  • Angular et ionicPush ne fonctionnent pas sur Android
  • Android - récupère le réseau de chaînes à partir des ressources
  • Obtenir des coordonnées à partir du matériel GPS
  • Réglage d'un longClickListener sur un marqueur de carte
  • Comment Libgdx détecte-t-il la présence de clavier?
  • Paramètres d'environnement de mode de développement et mode de libération distinctifs sur Android
  •  public class AlertRest extends WebService { private String recurso = "notificacoes"; private String[] resposta; private AlertModelo mAlertModelo; public AlertModelo getNotificacao(Integer id_usuario, String token, Integer id_escola, String ids_aluno, Double latitude, Double longitude) throws Exception { /* dispara a requisição para a API retornar os dados do "recurso" necessário */ resposta = new WebService().postToken(recurso, token, "{\"id_usuario\":" + id_usuario + "," + "\"id_escola\":" + id_escola + "," + "\"ids_aluno\":\"" + ids_aluno + "\"," + "\"latitude\":" + latitude + "," + "\"longitude\":" + longitude + "}"); JSONObject mJSONObject = new JSONObject(resposta[1]); if (resposta[1].equals("201")) { mAlertModelo = new AlertModelo(); mAlertModelo.setId_usuario(mJSONObject.getInt(String.valueOf(id_usuario))); mAlertModelo.setId_escola(mJSONObject.getInt(String.valueOf(id_escola))); mAlertModelo.setIds_aluno(mJSONObject.getInt(String.valueOf(ids_aluno))); mAlertModelo.setLatitude(mJSONObject.getDouble(String.valueOf(latitude))); mAlertModelo.setLongitude(mJSONObject.getDouble(String.valueOf(longitude))); } return mAlertModelo; } } 

  • Impossible de dlopen (libsomething.so) Impossible de charger la bibliothèque: link_image : impossible de lier libsomething.so
  • Android.content.res.Resources $ NotFoundException: String ID de la ressource # 0x0
  • Comment créer un magasin de clés?
  • Disposition de glisser-déplacer dans Android 2.2
  • Comment afficher la barre de progression jusqu'à la lecture vidéo en direct en direct Android?
  • Comment stocker une valeur de temps dans la base de données SQLite dans Android?
  • 2 Solutions collect form web for “ExpandableListView avec plusieurs choix enregistrer l'élément sélectionné dans un tableau”

    Le code est difficile à suivre en raison de quelques boucles imbriquées et des tâches en cours d'exécution. Quoi qu'il en soit, je soupçonne que le code ci-dessous amène votre application à enregistrer tous les éléments (non sélectionnés) de la liste:

     for (int i = 0; i < mArrayList.get(groupPosition).getalunos().size(); i++) { Integer Idalunos = mArrayList.get(groupPosition).getalunos().get(i).getId_aluno(); myIdList.add(Idalunos); } 

    Remarque: l'interception de toute la liste est un suspect. Il devrait choisir un certain élément ou des éléments dans la liste.

    Donc … un autre ensemble de codes pertinents peut nous aider à déterminer la correction du code. Je ne suis pas certain s'il y a un bug ici aussi.

     parent.setItemChecked(index, true); parent.setSelectedChild(groupPosition, childPosition, true); parent.getChildAt(index); 

    Remarque: Ces codes peuvent être corrects. Le code clé, je pense, est l' index . Je ne suis pas trop familier avec ExpandableListView.

    Enfin, la correction de code suggérée :

     Integer Idalunos = mArrayList.get(groupPosition).getalunos().get(index).getId_aluno(); ... myIdList.add(Idalunos); 

    Notez que l' index variable est utilisé pour obtenir l'élément correct, Idalunos.

    Vous utilisez la variable mArrayList pour l'initialisation de l'adaptateur et pour remplir myIdList en même temps. Bien sûr myIdList contiendrait la liste complète de votre adaptateur.

    METTRE À JOUR

    Il serait préférable de définir myIdList comme domaine de votre classe MainActivity et de l'initialiser dans la méthode onCreateView .

    Sur le clic, ne pas simplement ajouter la valeur – vous devriez vérifier si cette valeur est déjà dans la liste:

     if(myIdList.contains(Idalunos)) { myIdList.remove(Idalunos); } else { myIdList.add(Idalunos); } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.