Android 如何将Listview链接到AlertDialog

Android 如何将Listview链接到AlertDialog,android,listview,dialog,android-alertdialog,Android,Listview,Dialog,Android Alertdialog,我已经创建了一个单独的ListView类,它将显示公司的名称。现在我想将此ListView传递给主活动的AlertDialog。我创建了一个列表布局和一个文本布局来显示列表中的项目。现在我为Alertdialog创建了另一个布局。我想在第一页的按钮按下时显示此对话框。如何在这个Alerdialog中传递listView。这是我的主要活动代码 public class MainActivity extends AppCompatActivity { @Override protected voi

我已经创建了一个单独的ListView类,它将显示公司的名称。现在我想将此ListView传递给主活动的AlertDialog。我创建了一个列表布局和一个文本布局来显示列表中的项目。现在我为Alertdialog创建了另一个布局。我想在第一页的按钮按下时显示此对话框。如何在这个Alerdialog中传递listView。这是我的主要活动代码

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.option_menu_laout);

    Button button=(Button) findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showDialog();
        }
    });
}

public void showDialog(){

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    LayoutInflater inflater = this.getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.diallog_layout, null);
    builder.setView(dialogView);
    builder.setCancelable(true);
    builder.setTitle("Contact");

    ListViewActivity listViewActivity=new ListViewActivity();

    //how can I show li list item here?
  }
}
我的ListViewActivityClass是

public class ListViewActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_layout);
    populateListView();

}
private void populateListView() {
    //Create list of items
    String[] company= getResources().getStringArray(R.array.company_name);
    //Build Adapter
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(
            this, //Context for the Activity
            R.layout.first_alertlist_textstyle,
            android.R.id.text1,//Layout to use
            company); //Items to be displayed

    //Configure the list view
    ListView companyList =(ListView) findViewById(R.id.list_view);
    TextView alertTitle = (TextView) findViewById(R.id.title);
    companyList.setAdapter(adapter);

  }
}
公共类ListViewActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list\u布局);
populateListView();
}
私有void populateListView(){
//创建项目列表
String[]company=getResources().getStringArray(R.array.company\u name);
//构建适配器
ArrayAdapter适配器=新的ArrayAdapter(
这是活动的,//上下文
R.layout.first\u alertlist\u textstyle,
android.R.id.text1,//要使用的布局
公司);//要显示的项目
//配置列表视图
ListView companyList=(ListView)findViewById(R.id.list\u视图);
TextView alertTitle=(TextView)findViewById(R.id.title);
companyList.setAdapter(适配器);
}
}
我的列表布局是

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    />
</LinearLayout>
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:id="@+id/title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Contact"
    android:gravity="center_horizontal"
    android:textAppearance="@style/TextAppearance.AppCompat.Large"
    android:layout_gravity="center"
    />

  </LinearLayout>

显示列表项的文本布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:gravity="center"
    />
</LinearLayout>

对话框布局为

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    />
</LinearLayout>
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:id="@+id/title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Contact"
    android:gravity="center_horizontal"
    android:textAppearance="@style/TextAppearance.AppCompat.Large"
    android:layout_gravity="center"
    />

  </LinearLayout>

编辑代码

public class MainActivity extends AppCompatActivity {

ArrayList<Bean> bean=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.option_menu_laout);

    Button button=(Button) findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Alert();
            Toast.makeText(MainActivity.this, "Dialog", Toast.LENGTH_SHORT).show();
        }
    });
}

private void Alert(){
    ArrayList<Bean> bean=new ArrayList<>();
    View view = getLayoutInflater().inflate(R.layout.rating_dialog_layout, null);
    ListView details = (ListView) view.findViewById(R.id.ratingListViewId);
    Adapter adapter = new Adapter(bean,getApplicationContext());
    details.setAdapter(adapter);

    final AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Select");
    builder.setView(view);

    builder.setCancelable(false);
    builder.setNegativeButton("close", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
        }
    });
    details.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(final AdapterView<?> adapterView, View view, final int i, long l) {

            ;
        }
    });
    AlertDialog alertDialog = builder.create();
    alertDialog.show();
}
public类MainActivity扩展了AppCompatActivity{
ArrayList bean=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.option\u menu\u laout);
Button Button=(Button)findViewById(R.id.Button);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
警惕();
Toast.makeText(MainActivity.this,“Dialog”,Toast.LENGTH_SHORT.show();
}
});
}
私有无效警报(){
ArrayList bean=新的ArrayList();
视图=GetLayoutFlater()。充气(R.layout.rating_对话框_布局,空);
ListView详细信息=(ListView)view.findViewById(R.id.ratingListViewId);
适配器=新适配器(bean,getApplicationContext());
详细信息。设置适配器(适配器);
final AlertDialog.Builder=new android.support.v7.app.AlertDialog.Builder(MainActivity.this);
建造商。设置标题(“选择”);
builder.setView(视图);
builder.setCancelable(false);
setNegativeButton(“关闭”,新建DialogInterface.OnClickListener()){
@凌驾
公共void onClick(DialogInterface,inti){
dialogInterface.dismise();
}
});
details.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(最终适配器视图AdapterView、视图视图、最终int i、长l){
;
}
});
AlertDialog AlertDialog=builder.create();
alertDialog.show();
}

}

只需创建一个自定义对话框,如下所示:

或参见下面的示例:

private void showDialog(){

    final Dialog dialog = new Dialog(this);

    View view = getLayoutInflater().inflate(R.layout.dialog_main, null);

    ListView lv = (ListView) view.findViewById(R.id.custom_list);

    // Change MyActivity.this and myListOfItems to your own values
    CustomListAdapterDialog clad = new CustomListAdapterDialog(MyActivity.this, myListOfItems);

    lv.setAdapter(clad);

    lv.setOnItemClickListener(........);

    dialog.setContentView(view);

    dialog.show();

}
调用此按钮并单击
私有无效警报(){
视图=GetLayoutFlater()。充气(R.layout.rating_对话框_布局,空);
ListView详细信息=(ListView)view.findViewById(R.id.ratingListViewId);
适配器=新适配器(bean,getApplicationContext());
详细信息。设置适配器(适配器);
android.support.v7.app.AlertDialog.Builder=新的android.support.v7.app.AlertDialog.Builder(MainActivity.this);
建造商。设置标题(“选择”);
builder.setView(视图);
builder.setCancelable(false);
setNegativeButton(“关闭”,新建DialogInterface.OnClickListener()){
@凌驾
公共void onClick(DialogInterface,inti){
dialogInterface.dismise();
}
});
detailsbtn.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(最终适配器视图AdapterView、视图视图、最终int i、长l){
alertdialog.disclose();
}
});
alertdialog=builder.create();
alertdialog.show();
}
使用Bean类
公共类Bean{
公共Bean(字符串_id,字符串描述){
这个。_id=_id;
this.description=描述;
}
字符串_id;
字符串描述;
公共字符串get_id(){
返回_id;
}
公共无效集\u id(字符串\u id){
这个。_id=_id;
}
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
this.description=描述;
}
}
使用适配器
公共类适配器扩展了BaseAdapter{
语境;
列表=新的ArrayList();
公共适配器(ArrayList列表,上下文){
this.context=上下文;
this.list=列表;
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气机=LayoutFlater.from(上下文);
视图v=充气机。充气(右布局。额定值排,空);
TextView idTv=(TextView)v.findViewById(R.id.id);
TextView-nameTv=(TextView)v.findViewById(R.id.name);
idTv.setText(String.valueOf(list.get(position));
nameTv.setText(list.get(position.getDescription());
返回v;
}
}
创建评级\布局\行

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/activity_vertical_margin">

    <TextView
        android:id="@+id/id"
        android:textColor="#000000"
        android:layout_width="match_parent"
        android:visibility="gone"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/name"
        android:textColor="#000000"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>



</LinearLayout>

创建自定义布局额定值对话框布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"

    android:layout_height="match_parent">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ratingListViewId"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

您可以使用以下命令创建一个简单的列表警报对话框
public class NotificationListAdapter extends BaseAdapter {

private Context mContext;
private List<NotificationModel> notificationModels;

public NotificationListAdapter(Context mContext, List<NotificationModel> notificationModels) {
    this.mContext = mContext;
    this.notificationModels = notificationModels;
}

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

@Override
public NotificationModel getItem(int i) {
    return notificationModels.get(i);
}

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

@Override
public View getView(int position, View view, ViewGroup viewGroup) {

    NotificationViewHolder notificationViewHolder;

    if (view == null) {

        LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        view = mInflater.inflate(R.layout.item_notification, null);

        notificationViewHolder = new NotificationViewHolder();

        notificationViewHolder.item_view = (RelativeLayout) view.findViewById(R.id.notification_item);
        notificationViewHolder.textView_notification = (TextView) view.findViewById(R.id.tv_notification);
        notificationViewHolder.textView_time = (TextView) view.findViewById(R.id.tv_notification_time);

        view.setTag(notificationViewHolder);

    } else {
        notificationViewHolder = (NotificationViewHolder) view.getTag();
    }

    NotificationModel notificationModel = getItem(position);

    // UI Update...(Data binding)

    return view;
}

private class NotificationViewHolder {
    RelativeLayout item_view;
    TextView textView_notification, textView_time;
}
}
builder.setItems for list string
builder.setMultiChoiceItems
builder.setSingleChoiceItems
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.option_menu_laout);

    Button button=(Button) findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            openCompaniesActivity()
        }
    });
}

public void openCompaniesActivity()(){   
    startActivity(new Intent(this, ListViewActivity.class));
  }
}
public class ListViewActivity extends Activity{

String[] company;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_layout);
    populateListView();

}
private void populateListView() {
    //Create list of items
    company= getResources().getStringArray(R.array.company_name);
    //Build Adapter
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(
            this, //Context for the Activity
            R.layout.first_alertlist_textstyle,
            android.R.id.text1,//Layout to use
            company); //Items to be displayed

    //Configure the list view
    ListView companyList =(ListView) findViewById(R.id.list_view);
    companyList.setAdapter(adapter);
    companyList.setOnItemsClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String selectedCompany = company[position];
                //Create you dialog, depending from selected company.
                AlertDialog.Builder builder = new AlertDialog.Builder(ListViewActivity.this);
                LayoutInflater inflater = ListViewActivity.this.getLayoutInflater();
                View dialogView = inflater.inflate(R.layout.diallog_layout, null);
                builder.setView(dialogView);
                builder.setCancelable(true);
                builder.setTitle("Contact");
                builde.show(); 
            }
        })

  }
}