0

Я работаю над списком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> 

На старт drop down open

Выберите Создать появляется launch

выпадающим Открыть новую и EditText, однако она не будет держать фокус делает он не редактируется edit text that is not selectable

+0

1) ListView адаптер - начать использовать ViewHolder 2) GetView - поставить свой код setSelection и setOnItemSelectedListener в условиях видимости фильеры – MKJParekh

+0

Попробуйте его с помощью 'spinner.setSelection (spinnerAdapter.getCount(), ложные);' –

+0

я буду чтобы посмотреть в ViewHolders, однако установка setSelection и setOnItemSelectedListener внутри условия видимости не сработала для меня. Также отключить анимацию также не удалось. Я ценю ответы! Я надеюсь, что из этого выйдут другие идеи. – BinaryShrub

ответ

0

Я нашел решение своей проблемы. Оказывается, реальная проблема заключается в редактировании текста внутри ListView. Я должен был установить этот флаг в определении своей деятельности в моем манифесте, и все просто сработало!

<activity android:name= ".Activity" android:windowSoftInputMode="adjustPan"/> 

Возможно, вам будет нужно больше разъяснений? Если это так, я буду отмечать ваш ответ как правильный.