Я работаю над спискомView, который будет содержать элементы, содержащие пользовательский счетчик. Целью того, что я пытаюсь сделать, является запись в каждом счетчике, где, когда он будет выбран, сам прядильник исчезнет, и появится текст редактирования.getView повторяется с setOnItemSelectedListener, даже если Visibility.GONE
В этом примере, который я предоставил, я создаю запись в spinner под названием «Создать новое», и, когда она выбрана, появится текст редактирования, позволяющий ввести новое имя.
Проблема, которую я вижу, - это когда выбрано «Создать новое», счетчик изменится на visibility.GONE и появится текст редактирования. однако вы никогда не сможете выбрать текст редактирования. Я считаю, что getView постоянно вызывается и, возможно, испортит то, что я пытаюсь выполнить.
Любые советы будут замечательными!
Activity.java
public class Activity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
List<String> categories = new ArrayList<>();
categories.add("Groceries");
categories.add("Gas");
categories.add("Travel");
List<String> entries = new ArrayList<>();
entries.add("first");
entries.add("second");
entries.add("third");
ListView listView = (ListView) findViewById(android.R.id.list);
listView.setAdapter(new ListAdapter(entries, categories));
}
private class ListAdapter extends ArrayAdapter<String> {
SpinnerAdapter spinnerAdapter;
public ListAdapter(List<String> entries, List<String> categories) {
super(Activity.this, 0, entries);
spinnerAdapter = new SpinnerAdapter(categories);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.list_item, parent, false);
}
final Spinner spinner = (Spinner) convertView.findViewById(R.id.spinner);
final EditText categoryEditText = (EditText) convertView.findViewById(R.id.edit_text);
spinner.setAdapter(spinnerAdapter);
spinner.setSelection(spinnerAdapter.getCount());
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// if the create item was selected, hide the spinner and show the edit text
if (position == spinnerAdapter.getCount()-1) {
spinner.setVisibility(View.GONE);
categoryEditText.setVisibility(View.VISIBLE);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
return convertView;
}
private class SpinnerAdapter extends ArrayAdapter<String> {
public SpinnerAdapter(List<String> categories) {
super(Activity.this, android.R.layout.simple_spinner_dropdown_item, categories);
categories.add("Create New");
categories.add("Choose a Category");
this.notifyDataSetChanged();
}
@Override
public int getCount() {
return super.getCount() - 1; // last item is a place holder
}
}
}
}
activity.xml
<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:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
</ListView>
</LinearLayout>
list_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
выпадающим Открыть новую и EditText, однако она не будет держать фокус делает он не редактируется
1) ListView адаптер - начать использовать ViewHolder 2) GetView - поставить свой код setSelection и setOnItemSelectedListener в условиях видимости фильеры – MKJParekh
Попробуйте его с помощью 'spinner.setSelection (spinnerAdapter.getCount(), ложные);' –
я буду чтобы посмотреть в ViewHolders, однако установка setSelection и setOnItemSelectedListener внутри условия видимости не сработала для меня. Также отключить анимацию также не удалось. Я ценю ответы! Я надеюсь, что из этого выйдут другие идеи. – BinaryShrub