web-dev-qa-db-ja.com

AlertDialogリストのカスタムオブジェクト。表示文字列を取得してから実際の値を取得する方法は?

私はAndroid AlertDialogを見ていて、setItems(...)を使用して表示される文字列のリストを追加するのは簡単です。

ただし、ほとんどの場合、Nice Stringsを表示するリストが必要ですが、リストから何かを選択するときは、Stringではなく実際の値が必要です。

私はそれを簡単で素敵な方法で行う方法を見つけることができませんでした。

チップ? =)

final Button Button1 = (Button) findViewById(R.id.Button1);
Button1.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v) 
    {
        final CharSequence[] items = { "String 1", "String 2", "String 3" };
        // INstead of a string array, I want something like:
        // ArrayList<CustomObject> test = new ArrayList<CustomObject>(myArray);
        // And the CustomObject has a toString() and also a value. This array should in the best of worlds be the base for the list below =)

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(LanguageHandler.GetString("Test"));
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {

                // ***   I want to get the value here!   ***

                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }
});
13
Ted

CharSequence[] items = { "String 1", "String 2", "String 3" };の代わりに、アラートダイアログでCustom Adapterを使用できます。

何かのようなもの、

AlertDialog.Builder builder = new AlertDialog.Builder(MyApp.this);
            builder.setTitle("Select");
            builder.setAdapter(adapter,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int item) {
                            Toast.makeText(MyApp.this, "You selected: " + items[item],Toast.LENGTH_LONG).show();
                            dialog.dismiss();
                        }
                    });
            AlertDialog alert = builder.create();
            alert.show();

あなたのlist_row.xmlファイル

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="horizontal"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content">
    <ImageView
        Android:id="@+id/icon"
        Android:layout_width="48px"
        Android:layout_height="48px"
        Android:layout_gravity="left" />

    <TextView
        Android:id="@+id/title"
        Android:textColor="#0000FF"
        Android:text=""
        Android:paddingLeft="10dip"
        Android:layout_gravity="center"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />
</LinearLayout>

そしてあなたのListAdapterのようなもの、

String[] items = {"airplanes", "animals", "cars", "colors", "flowers", "letters", "monsters", "numbers", "shapes", "smileys", "sports", "stars" };

// Instead of String[] items, Here you can also use ArrayList for your custom object..

ListAdapter adapter = new ArrayAdapter<String>(
        getApplicationContext(), R.layout.list_row, items) {

    ViewHolder holder;
    Drawable icon;

    class ViewHolder {
        ImageView icon;
        TextView title;
    }

    public View getView(int position, View convertView,
            ViewGroup parent) {
        final LayoutInflater inflater = (LayoutInflater) getApplicationContext()
                .getSystemService(
                        Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {
            convertView = inflater.inflate(
                    R.layout.list_row, null);

            holder = new ViewHolder();
            holder.icon = (ImageView) convertView
                    .findViewById(R.id.icon);
            holder.title = (TextView) convertView
                    .findViewById(R.id.title);
            convertView.setTag(holder);
        } else {
            // view already defined, retrieve view holder
            holder = (ViewHolder) convertView.getTag();
        }       

        Drawable drawable = getResources().getDrawable(R.drawable.list_icon); //this is an image from the drawables folder

        holder.title.setText(items[position]);
        holder.icon.setImageDrawable(drawable);

        return convertView;
    }
};
39
user370305