Android: получить Textview значение Spinner на кнопку click
У меня есть Spinner
, и я заполняю его обычаем SimpleCursorAdapter
. Spinner item layout содержит два TextView
s, Один TextView для идентификатора элемента,и он не виден, другой - для имени элемента. Я хочу получить этот идентификатор элемента на кнопке click event, а затем вставить его в базу данных Sqlite. Я получаю идентификатор на setOnItemSelectedListener
из Spinner
как
companySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// Get selected row data to show on screen
String companyId = ((TextView) view.findViewById(R.id.spinnerItemIdTv)).getText().toString();
Toast.makeText(getActivity(), companyId, Toast.LENGTH_LONG).show();
Log.w(TAG, "companyId:" + companyId);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
И Макет Элемента Spinner
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/spinnerItemIdTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#888"
android:textSize="20sp"
android:visibility="gone"/>
<TextView
android:id="@+id/spinnerItemNameTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#888"
android:textSize="20sp" />
</LinearLayout>
Но не смог сделать это по щелчку кнопки. Любая помощь будет оценена по достоинству.
4 ответа:
Я думаю, что вы ищете это
View selectedView = null; //Declare it as a class level variable so that you don't need to make it final spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedView = view; } @Override public void onNothingSelected(AdapterView<?> parent) { } });
И внутри события щелчка какой-нибудь кнопки сделайте вот так
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(selectedView!=null){ String companyId = ((TextView) selectedView.findViewById(R.id.spinnerItemIdTv)).getText().toString(); } else{//Something} } });
У вас есть адаптер, связанный с вашим спиннером, и я предполагаю, что у вас есть некоторая структура данных, связанная с адаптером. Вы можете получить данные, которые вам нужны onItemSelected (что-то вроде ниже)
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { myData = myArrayList.get(i); //OR myData = myAdapter.getItem(i); }
MyData может быть полем активности, и вы можете использовать более поздний обратный вызов onClick, связанный с вашей кнопкой.
Вы можете попробовать это
companySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinComp = (Spinner) view.findViewById(R.id.spinner_company); int selCompIndex = spinComp .getSelectedItemPosition(); String compID = companyList.get(selCompIndex).toString(); Toast.makeText(getActivity(), compID, Toast.LENGTH_LONG).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { } });
Где,
companyList
- ArrayList, который вы передаете адаптеру Spinner. Надеюсь, это сработает.
Измените свой
xml
на singleTextView
и используйтеtag
для ID.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <TextView android:id="@+id/spinnerItemNameTv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:tag="yourId" android:textColor="#888" android:textSize="20sp" /> </LinearLayout>
Теперь используйте
setText
для установки значения строки spinner и используйтеsetTag
для установки идентификатора строки, а затем получите идентификатор следующим образом.companySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String companyId = ((TextView) view.findViewById(R.id.spinnerItemNameTv)).getTag().toString(); //use parent instead. Toast.makeText(getActivity(), companyId, Toast.LENGTH_LONG).show(); Log.w(TAG, "companyId:" + companyId); } @Override public void onNothingSelected(AdapterView<?> parent) { } });