gpt4 book ai didi

java - Android - 从微调器中选择项目后,如何使微调器显示该项目?

转载 作者:行者123 更新时间:2023-12-01 15:21:02 26 4
gpt4 key购买 nike

这是我的代码:

    package com.testotspeech;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Locale;

import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class AndroidTestToSpeechActivity extends Activity implements
TextToSpeech.OnInitListener, OnItemSelectedListener {
/** Called when the activity is first created. */

private TextToSpeech tts;
private Button btnSpeak;
private EditText txtText;
private ArrayList<String> itemsList;
private Spinner spinner;
private String contry_name;
private ArrayAdapter<String> dataAdapter;
private TextView textview;
private Iterator itr;
private String[] t = {"Please Select An Item"};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i("----------",Arrays.toString(Locale.getAvailableLocales()));
itemsList = new ArrayList<String>();
itemsList.add(Arrays.toString(Locale.getAvailableLocales()));
spinner = (Spinner)findViewById(R.id.spinner1);
spinner.setOnItemSelectedListener(this);


dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,t);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
spinner.setAdapter(dataAdapter);
textview = (TextView)findViewById(R.id.textView1);






tts = new TextToSpeech(this, this);
btnSpeak = (Button) findViewById(R.id.btnSpeak);
txtText = (EditText) findViewById(R.id.txtText);

// button on click event
btnSpeak.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {
speakOut();
}

});
}

@Override
public void onDestroy() {
// Don't forget to shutdown tts!
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
}

public void onInit(int status) {

if (status == TextToSpeech.SUCCESS) {

int result = tts.setLanguage(Locale.ENGLISH);

if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "This Language is not supported");
} else {
btnSpeak.setEnabled(true);
speakOut();

}

} else {
Log.e("TTS", "Initilization Failed!");
}

}

private void speakOut() {

String text = txtText.getText().toString();
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {

if (position == 0)
{
}
else
{

}
}

public void onNothingSelected(AdapterView<?> parent) {
textview.setText("");
}


}

编辑:

我想要做的是,当我单击微调器时,它会折叠/向下打开,并且我将拥有它自己的每个项目和盒子,并且它将位于行中,例如我单击了微调器,我现在会看到在其下:

你好

再见

丹尼尔

现在,如果我单击“Hello”,它会将“Hello”放入 textView1,如果我单击“Bye”,它也会将其放入 textView1,依此类推。但我希望旋转器的图形设计是,当我单击它时,它会折叠起来并向我显示一行中的项目,以便我可以单击并单击选择每个项目。

现在我所做的只是向微调器添加文本“请选择一个项目”我上传了我想要的图像,例如:

spinner example

最佳答案

这就是微调器的行为,始终有一个选定的项目。

您可以创建一个标志并在 onItemSelected 的重写中使用它,在其中放置一个计数器并使用它来忽略第一次进入。

像这样:

private int spinnerSelectCount = 0;

@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if(spinnerSelectCount == 0) {
// Do nothing... initial item on spinner display is the selected item
} else {
// your code to process spinner selection here
}
}
});

编辑

您需要将字符串作为数组中的第一项,而不是单独的字符串。

itemsList = new ArrayList<String>();  
itemsList.add("Please Select An Item");
itemsList.add(Arrays.toString(Locale.getAvailableLocales()));

然后使用数组调用微调器:

    dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,itemsList);        
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
spinner.setAdapter(dataAdapter);

既然你这样做了,你应该将过滤器更改为基于位置,而不是计数。

@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if(pos == 0) {
// Do nothing... initial item on spinner display is the selected item
} else {
// your code to process spinner selection here
textview.setText(itemsList.get(pos));
}
}
});

编辑2

您正在寻找多项选择吗?这对于标准旋转器来说是不可能的,它被设置为仅选择一项。如果您确实希望选择多个项目,则需要使用列表或创建自定义微调器。

幸运的是,看起来已经有人这么做了。您可以在这个SO Answer中找到代码

编辑3

MultiSpinner 不需要新项目。您只需创建一个新类并使用它来填充您的微调器。

1) 创建一个名为 MultiSpinner 的新类
2)从链接复制代码(省略包名称,因为您想使用自己的包名称)
3) 在您的 xml 中像这样调用微调器(将 com.yourpackage.name 替换为您的实际包名称):

<com.yourpackage.name.MultiSpinner android:id="@+id/multi_spinner" /> 

4)如链接所示调用微调器:

MultiSpinner multiSpinner = (MultiSpinner) findViewById(R.id.multi_spinner); 
multiSpinner.setItems(items, getString(R.string.for_all),
this);

关于java - Android - 从微调器中选择项目后,如何使微调器显示该项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10925868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com