9
votes

Dialogue personnalisé avec SetMultichoiceItems

Je veux créer une façon d'utiliser des utilisateurs peut sélectionner des options telles que l'image ci-dessous

Entrez la description de l'image ici

Je fais maintenant le suivant xxx

mais je veux ajouter toute option comme l'image. Je pense donc que je devrai construire une boîte de dialogue personnalisée. Puis-je toujours prolonger le SetMultiChoicepitems natifs afin de réduire ma manipulation du code.


4 commentaires

Le constructeur a un SETCustomtitle (vue) méthode.


@LUKSPROG Il doit avoir une case à cocher. comme montré dans l'image. Donc, lorsque je clique que je veux vérifier ou décocher tout le contenu de la boîte de dialogue.


Bien donner une vue sur cette méthode contenant un textview (le titre actuel) et la coche .


@Luksprog oh ok. Pouvez-vous partager des ressources pour la même chose où je peux voir comment cela peut être fait? Je pensais que nous devions construire un dialogue personnalisé


3 Réponses :


2
votes

J'ai atteint la chose que vous affichez dans l'image. Ce que j'ai utilisé était le dialogue personnalisé car vous envisagez d'utiliser. J'avais utilisé ListView dans le fichier XML.

Tout d'abord définir l'initialisation de l'arrayage ci-dessous. p> xxx pré>

ci-dessous est le code showdialog () fort> j'ai utilisé. p> xxx pré>

ici est mon logout_dialogue.xml strud>: p> xxx pré>

voici mon catagorysummaryadapter.java Strong>: P>

package com.inukshk.adapter;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.inukshk.HomeActivity;
import com.inukshk.R;
import com.inukshk.CreateInukshk.BuildInukshk_3;
import com.inukshk.WhosNearMe.WhosNearMe;

public class CatagorySummaryAdapter extends BaseAdapter {

    public Activity context;
    String TAG = "CatagorySummaryAdapter";
    public LayoutInflater inflater;
    public ArrayList<String> Count;
    boolean Dialogue;

    public CatagorySummaryAdapter(Activity context, ArrayList<String> Count,
            boolean Dialogue) {
        super();
        this.context = context;
        this.inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        this.Count = Count;

        this.Dialogue = Dialogue;

        // TODO Auto-generated constructor stub
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Count.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return Count.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public class ViewHolder {
        RelativeLayout lsummary_row;
        TextView txtinterestname;
        CheckBox chkinterest;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        int pos = position;
        ViewHolder holder;

        if (convertView == null) {
            holder = new ViewHolder();

            if (Dialogue) {
                convertView = inflater.inflate(
                        R.layout.listview_summary_dialogue_row, null);
            } else {
                convertView = inflater.inflate(R.layout.listview_summary_row,
                        null);
            }

            holder.txtinterestname = (TextView) convertView
                    .findViewById(R.id.txtinterestname);
            holder.lsummary_row = (RelativeLayout) convertView
                    .findViewById(R.id.lsummary_row);
            holder.chkinterest = (CheckBox) convertView
                    .findViewById(R.id.chkinterest);
            holder.chkinterest.setEnabled(true);

            holder.chkinterest.setTag(position);

            if (Dialogue) {

                for (int i = 0; i < HomeActivity.acceptpositionwhoesNearMe.size(); i++) {
                    int index = Integer
                            .parseInt(HomeActivity.acceptpositionwhoesNearMe
                                    .get(i));
                    // Log.i(TAG, "Inside for Loop of Accept Positions");
                    if (index == position) {
                        // Log.i(TAG, "Matched for index" + index);
                        holder.chkinterest.setChecked(true);
                        holder.chkinterest
                                .setButtonDrawable(R.drawable.checkbox_checked);
                    }

                }

            } else {
                for (int i = 0; i < BuildInukshk_3.acceptposition.size(); i++) {
                    int index = Integer.parseInt(BuildInukshk_3.acceptposition
                            .get(i));
                    // Log.i(TAG, "Inside for Loop of Accept Positions");
                    if (index == position) {
                        // Log.i(TAG, "Matched for index" + index);
                        holder.chkinterest.setChecked(true);
                        holder.chkinterest
                                .setButtonDrawable(R.drawable.checkbox_checked);
                    }

                }
            }

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.chkinterest
                .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,
                            boolean isChecked) {
                        // TODO Auto-generated method stub
                        // Log.i(TAG, "ISChecked is " + isChecked);
                        if (isChecked) {
                            // Log.i(TAG, "ISChecked is true");
                            buttonView
                                    .setButtonDrawable(R.drawable.checkbox_checked);
                            int position = Integer.parseInt(buttonView.getTag()
                                    .toString());
                            if (Dialogue) {
                                HomeActivity.acceptpositionwhoesNearMe.add(String
                                        .valueOf(position));

                                Log.i(TAG, "Accept ID of Dialogue"
                                        + HomeActivity.acceptpositionwhoesNearMe);
                            } else {
                                BuildInukshk_3.acceptposition.add(String
                                        .valueOf(position));

                                Log.i(TAG, "Accept ID"
                                        + BuildInukshk_3.acceptposition);
                            }

                        } else {
                            // Log.i(TAG, "ISChecked is false");
                            buttonView
                                    .setButtonDrawable(R.drawable.checkbox_unchecked);
                            int position = Integer.parseInt(buttonView.getTag()
                                    .toString());

                            if (Dialogue) {
                                if (HomeActivity.acceptpositionwhoesNearMe
                                        .contains(String.valueOf(position))) {
                                    // Log.i(TAG,
                                    // "Inside Already present position");
                                    HomeActivity.acceptpositionwhoesNearMe
                                            .remove(String.valueOf(position));
                                    Log.i(TAG,
                                            "Accept ID Dialogue***"
                                                    + HomeActivity.acceptpositionwhoesNearMe);
                                }
                            } else {
                                if (BuildInukshk_3.acceptposition
                                        .contains(String.valueOf(position))) {
                                    // Log.i(TAG,
                                    // "Inside Already present position");
                                    BuildInukshk_3.acceptposition.remove(String
                                            .valueOf(position));
                                    Log.i(TAG, "Accept ID ***"
                                            + BuildInukshk_3.acceptposition);
                                }
                            }
                            //
                        }

                    }
                });

        holder.txtinterestname.setText(Count.get(pos));

        return convertView;
    }

}


4 commentaires

N'est-il pas possible d'utiliser SetMultichoiceItems avec DialogPraGment?


@Harshamv: Je n'ai pas encore utilisé SherlockDialogPragment. Donc, pas capable de vous donner une suggestion correcte. Désolé.


aucun problème. Pouvez-vous partager le code faire sur le tout et décocher tout aussi. Juste que tu as mentionné tu as atteint ceci. Je pense que nous pouvons facilement porter votre code à dialogment


J'ai édité ma réponse. jetez un coup d'oeil. Et laissez-moi savoir si vous trouvez des difficultés.



10
votes

Vous pouvez probablement utiliser SetCustomtiTle () méthode du alertdialog.builder tous coque < / Code>, quelque chose comme ceci: xxx

r.layout.custom_title est: xxx

autre Les modifications de style devraient être faites pour le rendre meilleur. Mais voir la disposition de la boîte de dialogue totale, vous pouvez utiliser une classe de dialogue personnalisée , pour laquelle la méthode setmultichoice () ne sera pas disponible (mais à la fin, ce sera facile à reproduire).


4 commentaires

La méthode getlayoutinflater (paquet) dans la boîte de dialogue de type n'est pas applicable pour les arguments ()


@HARSHAMV getActivity (). GetLayOUTInflater ()


J'ai fait ce qui précède et j'ai mis en œuvre mon titre personnalisé, mais comment puis-je obtenir les valeurs des objets? Le FindViewByID ne fonctionne pas: /


@Alexanderfragotsis gonfler le titre personnalisé et stockez une référence à elle et la modifiez à partir de là. Voir title = getlayoutinflater (). Gonflez (r.layout.custom_title, null); .... setCustomtitle (titre); titre.findviewbyID (etc) .



1
votes

Je voulais aussi continuer à utiliser setmultichoicepitems () code> avec ma boîte de dialogue, donc au lieu de créer une boîte de dialogue personnalisée, j'ai fait ceci:

ne renvoie pas le alertdialog code > immédiatement. Créez le alertdialog.builder Code> C'est comme suit ceci: p>

alertdialog.builder Builder = New AlertDialog.Builder (getActivity ()); Code> P>

Définissez vos paramètres de constructeur: p> xxx pré>

puis créer le alertdialog code> appelant créer () code>. Cela ne montrera pas encore à la boîte de dialogue. P>

alertdialog buildog = Builder.Create (); Code> P>

Obtenez la liste code>, Ajoutez une en-tête et / ou de pied de pied et retournez-la. P>

ListView dialogList = dialog.getListView();
dialogList.addFooterView(yourHeader);
return dialog;


0 commentaires