展会信息港展会大全

Android弹窗中的spinner异常解决办法
来源:互联网   发布日期:2015-10-02 15:57:21   浏览:1218次  

导读:弹窗常用AlertDialog来袜,因为AlertDialog可以很方便的添加所要的项。比如确定/取消按钮,自定义的标题栏、自定义的信息布局等。在自定义布局时,比如我们采用LinearLayo...

弹窗常用AlertDialog来袜,因为AlertDialog可以很方便的添加所要的项。比如确定/取消按钮,自定义的标题栏、自定义的信息布局等。在自定义布局时,比如我们采用LinearLayout来布局,然后再往LinearLayout中添加一些项,比如TextView、EditText等。这些都很容易实现。

不过,如果添加spinner,可能就会出问题了。找了很久,发现是context引起的。因为spinner在点击展开下拉列表时,需要依赖于窗体,而使用context只是提供了一个上下文,并没有提供窗体,所以会造成错误。下面是已实现的代码:

package com.sparkle;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.app.Dialog;

import android.content.Context;

import android.content.DialogInterface;

import android.graphics.Color;

import android.util.Log;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.LinearLayout;

import android.widget.Spinner;

import android.widget.SpinnerAdapter;

import android.widget.TextView;

public class Contury {

private Activity _activity = null;

private Context _context = null;

private Spinner _spinner = null;

public Contury(Activity activity) {

_activity = activity;

_context = activity;

}

private LinearLayout GenerateLinearLayout(int orientation) {

LinearLayout linearLayout = new LinearLayout(_context);

linearLayout.setPadding(16, 16, 16, 16);

linearLayout.setOrientation(orientation);

return linearLayout;

}

@SuppressWarnings("deprecation")

private Spinner GenerateSpinner() {

Spinner spinner = new Spinner(_activity);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

spinner.setLayoutParams(layoutParams);

return spinner;

}

public void Popup() {

Builder alertDialogBuilder = new AlertDialog.Builder(_activity);

View view = GenerateLayout();

alertDialogBuilder.setView(view);

alertDialogBuilder.setPositiveButton("OK",

new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("TEST","OK");

}

});

alertDialogBuilder.setNegativeButton("Cancel", null);

Dialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

}

private View GenerateLayout() {

LinearLayout linearLayout = GenerateLinearLayout(LinearLayout.VERTICAL);

LinearLayout messageLinearLayout = GenerateMessageLayout();

linearLayout.addView(messageLinearLayout);

return linearLayout;

}

private LinearLayout GenerateMessageLayout() {

LinearLayout linearLayout = GenerateLinearLayout(LinearLayout.HORIZONTAL);

_spinner = GenerateSpinner();

_spinner.setAdapter(new CityAdapter(_activity));

_spinner.setSelection(0);

linearLayout.addView(_spinner);

return linearLayout;

}

private class CityAdapter extends BaseAdapter implements SpinnerAdapter {

private Context _con=null;

private String[] _cities=null;

public CityAdapter(Context context)

{

_con=context;

_cities=_con.getResources().getStringArray(

R.array.cities);

}

@Override

public int getCount() {

if(_cities==null)

{

return 0;

}

return _cities.length;

}

@Override

public Object getItem(int position) {

if(_cities==null||_cities.length注:

1、spinner和AlertDialog的new需使用activity,使用context将在弹出下拉菜单时造成错误。

2、_con.getResources().getStringArray(R.array.cities)是加载xml中定义的数组。

city.xml(位于values文件夹下)

厦门北京上海

赞助本站

人工智能实验室

相关热词: android开发

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港