我创建了一个自定义AlertDialog来显示Spinner和一些EditText元素.当我选择菜单选项时,会启动此自定义AlertDialog.一切正常,直到我实际选择微调器来尝试选择一个项目,此时我得到了BadTokenException.我已经读过其他StackOverflow帖子,说类似的异常是尝试使用getApplicationContext()而不是传递Activity.this来显示diaglog的结果.我没有明确地将getApplicationContext()传递给与此AlertDialog相关的任何内容.
为了设置这个自定义AlertDiaglog,我创建了一个包含Spinner和EditText元素的布局文件,然后使AlertDialog使用该布局:
LayoutInflater inflater = (LayoutInflater)getApplication().getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_layout, (ViewGroup)findViewById(R.id.custom_layout_root));
spinner = (Spinner)layout.findViewById(R.id.custom_layout_spinner);
ArrayAdapter adap = ArrayAdapter.createFromResource(Activity.this, R.array.data, android.R.layout.simple_spinner_item);
adap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adap);
spinner.setOnItemSelectedListener(new SpinnerItemListener());
AlertDialog.Builder dialog = new AlertDialog.Builder(Activity.this);
dialog.setTitle("Title");
dialog.setPositiveButton("Ok", new Dialog.OnClickListener() ...
...
dialog.show();
Run Code Online (Sandbox Code Playgroud)
此代码都可以正常显示AlertDialog.但是,当我实际触摸Spinner时,我遇到以下问题:
Thread [<3> main] (Suspended (exception WindowManager$BadTokenException))
ViewRoot.handleMessage(Message) line: 1704
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4203
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 791
ZygoteInit.main(String[]) line: 549
NativeStart.main(String[]) line: not …Run Code Online (Sandbox Code Playgroud) 在使用此代码(从此处改编)时,我收到以下错误:
构造函数ArrayAdapter(new AdapterView.OnItemSelectedListener(){},int,String [])未定义
有人可以帮忙纠正这个吗?谢谢
private void setDynamicSpinnerBE() {
beSpinner = (Spinner) findViewById(R.id.spBE);
final String[] itemsSpinner2;
lensSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Integer focalLength = (Integer) parent.getAdapter().getItem(
position);
itemsSpinner2 = getBellowsExtension(focalLength, maxBellows,
precision);
ArrayAdapter<CharSequence> beAdapter = new ArrayAdapter<CharSequence>(
this, android.R.layout.simple_spinner_item,
itemsSpinner2);
beAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
beSpinner.setAdapter(beAdapter);
}
public void onNothingSelected(AdapterView<?> parent) {
beSpinner.setAdapter(null);
}
}
);
...
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的UI中使用simple_spinner_item和simple_spinner_dropdown_item之间做出决定......所以我把两个都放在屏幕上来连续尝试它们.虽然我更喜欢... dropdown_item的扩展样式,它的未扩展大小比... spinner_item大,我不知道为什么,因为xml定义没有区别......只是执行不同的通过Java查看,
例如
ArrayAdapter<String> adapter1 = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, arrayOfSomeStrings); //set the adapter to
Run Code Online (Sandbox Code Playgroud)
spinner1
VS
ArrayAdapter<String adapter2> = new ArrayAdapter(this,android.R.layout.simple_spinner_item, arrayOfSomeMoreStrings); //set the adapter to spinner2
Run Code Online (Sandbox Code Playgroud)
在我看来,simple_spinner_dropdown_item必须有不同的prefferedHeight/size或者什么......这是真的吗?以及我如何覆盖它并使两个微调器在UI上看起来相同,直到扩展?
当从一个视图移动到另一个视图时,我想在我的第二个视图中,只要下载图像以查看微调器(这样第二个视图将立即打开而不需要任何时间,并且用户等待微调器完).
这是我的代码:
在第二个视图中,打开的视图:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIActivityIndicatorView *spinner=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center=CGPointMake(160.0,240.0 );
spinner.hidesWhenStopped=YES;
[self.view addSubview:spinner];
[spinner startAnimating];
NSString *urlString=[NSString stringWithFormat:@"http://mysite.com/projects/test/test.jpg"];
NSLog(@"URL is:%@",urlString);
NSURL *url=[NSURL URLWithString:urlString];
[more_info_image setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:url]]];
[spinner stopAnimating];
}
Run Code Online (Sandbox Code Playgroud)
我根本看不到旋转器.我不认为这是因为我的互联网连接太胖了.另一方面,当按下按钮并等待视图打开时,我看到一点延迟 - 就像它试图下载图像的时候一样.
我想打开视图,拥有微调器,下载图像然后让微调器消失.
我必须改变什么吗?
我无法使用我的微调器setSelection()方法解决问题.我正在编写一个程序来保存数据,我从数据库中的某种表中获取数据.当用户打开程序时,它从数据库加载数据并添加3个空"表"行,以便用户可以填充并保存.当加载来自数据库的数据时,我需要正确设置微调器的选择,但是当我尝试我的代码时,它只是不起作用,并且屏幕上的所有微调器都会出现,并且选择了0项.这是我的代码.
OnCreate()方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data);
dbHelper = new DBHelper(this);
content = (LinearLayout) findViewById(R.id.content);
inflater = getLayoutInflater();
Calendar c = Calendar.getInstance();
cur_year = c.get(Calendar.YEAR);
cur_month = c.get(Calendar.MONTH);
cur_day = c.get(Calendar.DAY_OF_MONTH);
load_array();
load_database();
for (int i = 0; i < EMPTY_LINES_TO_DRAW; i++) {
draw();
}
}
Run Code Online (Sandbox Code Playgroud)
load_array()是一个加载数组"供应商"(来自文件)的函数,然后我将它放入我的微调器适配器中.
load_database()函数:
private void load_database() {
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor c = db.query("mytable", null, null, null, null, null, null);
if (c.moveToFirst()) {
int date_1_Index = c.getColumnIndex("date_1");
int key_Index = c.getColumnIndex("key_field"); …Run Code Online (Sandbox Code Playgroud) 我有一个MvxSpinner定义如下,我试图在用户通过ItemSelected绑定选择微调器中的项时触发命令:
<Mvx.MvxSpinner
style="@style/Spinners"
android:id="@+id/jobStatusSpinner"
android:prompt="@string/jobstatus_prompt"
local:MvxBind="ItemsSource JobStatuses; SelectedItem SelectedJobStatus; ItemSelected FilterJobsByStatusCommand"
local:MvxDropDownItemTemplate="@layout/spinner_jobstatuses"
local:MvxItemTemplate="@layout/item_jobstatus" />
Run Code Online (Sandbox Code Playgroud)
我已经确认FilterJobsByStatusCommand可以通过添加按钮从视图中调用:
<Button
android:text="Test"
android:background="@drawable/StandardButton"
style="@style/Buttons.FullWidth"
android:layout_centerHorizontal="true"
local:MvxBind="Click FilterJobsByStatusCommand" />
Run Code Online (Sandbox Code Playgroud)
这成功触发了FilterJobsByStatusCommand也成功使用SelectedJobStatusViewModel 的属性来更新作业列表.应该 ItemSelected绑定工作还是我错过了一些其他代码或不同的绑定?
我怎样才能获得Holo Spinner轻松活动,或相反?
因为如果我把HoloTheme用于活动,每一个都View将是Holo ......
我正在建立一个具有自毁图像的应用程序,我试图将从微调框中选择的值传递给另一个类
final String titles[] = {"1 Second","2 Seconds", "3 Seconds","4 Seconds","5 Seconds","6 Seconds","7 Seconds", "8 seconds, "9 seconds", 10 seconds};
mSeconds = (Spinner) view.findViewById(R.id.secondsSpinner);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, titles);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSeconds.setAdapter(arrayAdapter);
mSeconds.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
int secondsToUse = position + 1;
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// do nothing
}
});
Run Code Online (Sandbox Code Playgroud)
我的意图方法:
Intent recipientsIntent = new Intent(getActivity(), RecipientsActivity.class);
recipientsIntent.putExtra("key1", titles);
startActivity(recipientsIntent);
Run Code Online (Sandbox Code Playgroud)
如何将选中的值传递给另一个类?我的方法传递整个数组而不是选中的项目.
我想将Spinner下拉项目的文本颜色更改为黑色.
我有一个自定义Spinner,列出了不同的语言.它有一个ImageView和一个TextView.微调器显示在带有白色文本的蓝色背景上,看起来很好.
问题是当它被点击时,下拉显示但文本几乎看不到,因为下拉的浅灰色和文本的白色.
这是Spinner的代码activity_main.xml:
<Spinner
android:id="@+id/languageSpinner"
style="@android:style/Widget.Material.Light.DropDownItem.Spinner"
android:layout_width="140dp"
android:layout_height="40dp"
android:prompt="@string/selectLanguageSpinner"
android:spinnerMode="dropdown" />
Run Code Online (Sandbox Code Playgroud)
这是spinner_row_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
<TextView
android:id="@+id/language"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_gravity="center_vertical"
android:layout_marginEnd="10dp"
android:layout_marginStart="5dp"
android:gravity="center_vertical"
android:lineSpacingExtra="20dp"
android:minHeight="40dp"
android:textColor="@color/white"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这里文本颜色设置为白色,因为当没有选择任何内容时我需要它是白色的.
这是以下代码styles.xml:
<!-- Base application theme. -->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/myAppPrimaryColor</item>
<item name="colorPrimaryDark">@color/myAppPrimaryDarkColor</item>
<item name="colorAccent">@color/myAppAccentColor</item>
<item …Run Code Online (Sandbox Code Playgroud) 我创建了一个微调器,但是我想更改文本颜色和字体大小。Web上有很多Java教程。我是新手,因此很难将Java转换为Kotlin。请帮助找到解决方案。
SpinnerActivity.kt
class SpinnerActivity : AppCompatActivity() {
lateinit var option : Spinner
lateinit var result :TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_spinner)
option = findViewById(R.id.sp_option) as Spinner
result = findViewById(R.id.tv_result) as TextView
val options = arrayOf("111", "222", "333")
option.adapter = ArrayAdapter<String>(this,R.layout.spinner_layout,options)
option.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onNothingSelected(parent: AdapterView<*>?) {
//TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
result.text = "please select an option"
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, …Run Code Online (Sandbox Code Playgroud)