显示带有单选按钮的 alertDialog 并将选定的按钮添加到 listView - Android

Show alertDialog with radio buttons and add the selected one to a listView - Android

我想开发一个简单的android页面,代码如下

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <RelativeLayout
        android:id="@+id/ll1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_weight="3"
        android:background="#2196F3">
    </RelativeLayout>
    <LinearLayout
        android:id="@+id/ll3"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">


        <ListView
            android:id="@+id/item_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#ffffffff">

        </ListView>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="70dp"
            android:orientation="horizontal"
            android:gravity="center_horizontal"
            android:background="#2196F3">

            <Button
                style="?android:attr/buttonStyleSmall"
                android:id ="@+id/addItem"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:text="Add Item"
                android:layout_marginTop="10dp"
                android:background="@layout/button_rounded"
                android:textColor="#ffffffff"/>

        </LinearLayout>
    </LinearLayout>

</LinearLayout>

我的java代码如下

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    final Context context = this;
    private ListView lv;
    private Button b;

    ArrayList<String> items_list = new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b = (Button)findViewById(R.id.addItem);
        b.setOnClickListener(this);

        lv = (ListView)findViewById(R.id.item_list);
        lv.setAdapter(new VersionAdapter(this));
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        String[] items = {"Pen","Book","File","Note"};
        if (v.getId() == R.id.addItem) {
            //
        }
    }

    class VersionAdapter extends BaseAdapter {
        private LayoutInflater layoutInflater;
        public VersionAdapter(MainActivity activity) {
            layoutInflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return items_list.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            View listItem = convertView;
            int pos = position;

            TextView tv = (TextView) listItem.findViewById(R.id.item_element);
            if(!items_list.isEmpty()) {
                tv.setText(items_list.get(pos));

            }
            return listItem;
        }

    }
}

当我点击添加项目按钮时,我希望出现一个单选按钮的警告对话框。单选按钮列表将从 items 数组填充。当我选择一个项目并单击 ok 时,它应该被添加到屏幕上的列表视图 lv(id - item_list) 中。

显示对话框的代码

private void showAlertWithRadioButtons(){
AlertDialog.Builder builder = new AlertDialog.Builder(ShowDialog.this);//ERROR ShowDialog cannot be resolved to a type
        builder.setTitle("Alert Dialog with ListView and Radio button");
        builder.setSingleChoiceItems(items, -1,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {
                         // Toast.makeText(getApplicationContext(), items[item],
                                Toast.LENGTH_SHORT).show();
                    }
                });
    }
 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {

        ListView lw = ((AlertDialog)dialog).getListView();
        Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition());
        itemsList.add(String.valueOf(checkedItem));
        adapter.notifyDataSetChanged();

        }
    });}

为您的列表视图设置一个适配器:

List<String> itemsList = Arrays.asList(items);
// create ArrayAdapter with this exact parameters, not unique because of your app
ArrayAdapter<String> adapter = new VersionAdapter(this, itemsList);
lv.setAdapter(adapter);

这是稍加修改后的适配器

class VersionAdapter extends ArrayAdapter<String> {

private List<String> listItems;
private LayoutInflater layoutInflater;

public VersionAdapter(Activity activity, List<String> listItems) {
    super(activity, 0, listItems);
    layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.listItems = listItems;
}

@Override
public int getCount() {
    return listItems.size();
}

@Override
public int getItemViewType(int position) {
    return super.getItemViewType(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    String item = listItems.get(position);
    final ViewHolder holder;
    if (convertView == null)
    {
        convertView = layoutInflater.inflate(R.layout.list_item, parent, false);
        holder = new ViewHolder();

        holder.itemElement = (TextView) convertView.findViewById(R.id.item_element);
        convertView.setTag(holder);

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

    if(!item.isEmpty()) {
        holder.itemElement.setText(item);

    }
    return convertView;
}

static class ViewHolder {
    TextView itemElement;
}

}

试试这个,

用列表设置适配器;

VersionAdapter versionAdapter = new VersionAdapter(this),items_list
lv.setAdapter(versionAdapter);

添加此适配器:

class VersionAdapter extends BaseAdapter {
        private LayoutInflater layoutInflater;
        private  ArrayList<String> items_list
        public VersionAdapter(MainActivity activity,ArrayList<String> items_list) {
            layoutInflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.items_list=items_list;
        }

        @Override
        public int getCount() {
            return items_list.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            ViewHolder viewHolder = null;
    if(convertView==null){
            viewHolder = new ViewHolder();
            viewHolder.tv = (TextView) listItem.findViewById(R.id.item_element);
            convertView.setTag(viewHolder);
            }else{
           viewHolder = (ViewHolder) convertView.getTag();
            }
            if(!items_list.get(position).isEmpty()) {
                viewHolder.tv.setText(items_list.get(pos));

            }
            return convertView;
        }

      public void addItem(String text){
         items_list.add(text);
         notifyDataSetChanged() 
        }

    }
}

点击调用适配器的添加方法:

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        String[] items = {"Pen","Book","File","Note"};
        if (v.getId() == R.id.addItem) {

            versionAdapter.addItem(radioBtnText);
        }
    }