Android Множественный выбор элемента с помощью флажка кнопки и диалогового окна и отображение выбранного элемента в списке вместо кнопки

Я пытаюсь сделать множественный выбор элемента Android с помощью флажка кнопки и диалогового окна и отобразить выбранный элемент в списке (как на картинке) вместо кнопки (текущий отображается в кнопке: см. рисунок)

я могу отобразить приемник в кнопке ниже, но я хочу, чтобы то же самое отображалось в виде списка:

в настоящее время отображается после выбора флажка в диалоговом окне, например:

"Receiver1, Receiver2"

Я хочу как:

image of Receiver1 with Receiver1 Name
image of Receiver2 with Receiver2 Name

SendServiceActivity.java

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Layout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.ImageView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;

public class SendServiceActivity extends AppCompatActivity implements View.OnClickListener{
protected Button selectReceiversBtn;
    protected CharSequence[] receivers = {
            "Receiver1", "Receiver2", "Receivers3"};
    protected ArrayList<CharSequence> selectedReceivers = new ArrayList<>();

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        selectReceiversBtn = (Button) findViewById(R.id.select_receivers);
        selectReceiversBtn.setOnClickListener((View.OnClickListener) this);
    }

    @Override
    public void onClick(View view) {
        switch(view.getId()) {
            case R.id.select_receivers:
                showSelectReceiversDialog();
                break;
            default:
                break;
        }
    }   

    protected void onChangeSelectedReceivers() {
        StringBuilder stringBuilder = new StringBuilder();

        for(CharSequence receivers : selectedReceivers)
            stringBuilder.append(receivers + ",");
        selectReceiversBtn.setText(stringBuilder.toString());
    }

    protected void showSelectReceiversDialog() {
        boolean[] checkedReceivers = new boolean[receivers.length];
        int count = receivers.length;

        for(int i = 0; i < count; i++)
            checkedReceivers[i] = selectedReceivers.contains(receivers[i]);

        DialogInterface.OnMultiChoiceClickListener receiversDialogListener = new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if(isChecked)
                    selectedReceivers.add(receivers[which]);
                else
                    selectedReceivers.remove(receivers[which]);

                onChangeSelectedReceivers();
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder
                .setTitle("Select Receivers")
                .setMultiChoiceItems(receivers, checkedReceivers, receiversDialogListener)
                .setCancelable(false)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.dismiss();
                    }
                });
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Activity_main.xml

            <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="5dip"
                android:text="Select Receivers" />

            <Button
                android:id="@+id/select_receivers"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="5dip"
                android:text="- None Selected -" />


        </LinearLayout>

введите описание изображения здесь


person RRPANDEY    schedule 06.11.2015    source источник


Ответы (2)


полный исходный код вашего требования ниже:

mainactivity.class

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.Layout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.ImageView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;

public class MainActivity extends Activity implements View.OnClickListener{
    ArrayAdapter<CharSequence> adapter;
    ListView listView1;
    protected Button selectReceiversBtn;
    protected CharSequence[] receivers = {
            "Receiver1", "Receiver2", "Receivers3"};
    protected ArrayList<CharSequence> selectedReceivers = new ArrayList<>();

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        listView1=(ListView) findViewById(R.id.listView1);
        selectReceiversBtn = (Button) findViewById(R.id.select_receivers);
        selectReceiversBtn.setOnClickListener((View.OnClickListener) this);


       // String[] your_array = {"a","b","c"}
        adapter = new ArrayAdapter<CharSequence>(this,
                android.R.layout.simple_list_item_multiple_choice, selectedReceivers);
        listView1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        listView1.setAdapter(adapter);
    }

    @Override
    public void onClick(View view) {
        switch(view.getId()) {
            case R.id.select_receivers:
                showSelectReceiversDialog();
                break;
            default:
                break;
        }
    }   

    protected void onChangeSelectedReceivers() {
        StringBuilder stringBuilder = new StringBuilder();

        for(CharSequence receivers : selectedReceivers)
            stringBuilder.append(receivers + ",");
        adapter.notifyDataSetChanged();
        //selectReceiversBtn.setText(stringBuilder.toString());
    }

    protected void showSelectReceiversDialog() {
        boolean[] checkedReceivers = new boolean[receivers.length];
        int count = receivers.length;

        for(int i = 0; i < count; i++)
            checkedReceivers[i] = selectedReceivers.contains(receivers[i]);

        DialogInterface.OnMultiChoiceClickListener receiversDialogListener = new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if(isChecked)
                    selectedReceivers.add(receivers[which]);
                else
                    selectedReceivers.remove(receivers[which]);

                onChangeSelectedReceivers();
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder
                .setTitle("Select Receivers")
                .setMultiChoiceItems(receivers, checkedReceivers, receiversDialogListener)
                .setCancelable(false)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.dismiss();

                    }
                });
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dip"
        android:text="Select Receivers" />

    <Button
        android:id="@+id/select_receivers"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dip"
        android:text="- None Selected -" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

скопируйте и вставьте приведенный выше код.. когда вы проверяете диалоговое окно, оно автоматически добавляется в список

person Ketan Patel    schedule 09.11.2015

Приведенный ниже код подойдет вам:

String[] your_array = {"a","b","c"}
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, your_array);
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        listView.setAdapter(adapter);

Используя приведенный выше код, вы можете отметить-не отметить в виде списка.

person Ketan Patel    schedule 07.11.2015
comment
@ Ketan, как я могу реализовать ваш код в своем коде, так как я новичок в Java, поэтому прошу вас. - person RRPANDEY; 07.11.2015
comment
адаптер = новый ArrayAdapter‹String›(это, android.R.layout.simple_list_item_multiple_choice, получатели); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listView.setAdapter (адаптер); - person Ketan Patel; 07.11.2015
comment
выше 3 строки используйте вместо открытого диалога - person Ketan Patel; 07.11.2015
comment
использовать список в xml файле - person Ketan Patel; 07.11.2015
comment
вы можете использовать пример из приведенной ниже ссылки. /2012/04/ - person Ketan Patel; 09.11.2015
comment
Я не ищу проверяемый список, я использую флажок в качестве диалогового окна предупреждения (что я уже сделал), я хочу, чтобы выбранный элемент отображался в списке из флажка. Концепция такова: когда я нажимаю кнопку, появляется диалоговое окно «Изменить», в котором есть флажок, затем я выбираю некоторые получатели и нажимаю «ОК», после того, как я сказал «ОК», выбранные получатели должны отображаться в виде списка, в настоящее время он отображается на той же кнопке с разделителями-запятыми, как вы можете смотрите на скриншоте - person RRPANDEY; 09.11.2015
comment
тогда почему бы не отображать список при нажатии кнопки (ok) с помощью arraylist (selectedReceivers).. - person Ketan Patel; 09.11.2015
comment
как показано ниже.. adapter = new ArrayAdapter‹String›(this, android.R.layout.simple_list_item_multiple_choice, selectedReceivers); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listView.setAdapter (адаптер); - person Ketan Patel; 09.11.2015
comment
не в состоянии сделать, не могли бы вы указать то же самое в коде? - person RRPANDEY; 09.11.2015
comment
хорошо.. вы можете использовать ниже полный код.. просто скопируйте и вставьте.. нужно только изменить имя main_activity.class - person Ketan Patel; 09.11.2015
comment
Спасибо, Кетан, сработало только то, что я не хочу устанавливать флажок в выбранном представлении списка, поскольку он уже есть в диалоговом окне. - person RRPANDEY; 09.11.2015
comment
Давайте продолжим обсуждение в чате. - person Ketan Patel; 09.11.2015