2017-02-11 2 views
1

у меня есть этот код:Как адаптер имеет дело с пустым массивом в Android?

WordAdapter.java

public class WordAdapter extends ArrayAdapter<Word> { 

     public WordAdapter(Context context, ArrayList<Word> words, int colorResourceId) { 
      super(context, 0, words); 
      mColorResourceId = colorResourceId; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // Check if an existing view is being reused, otherwise inflate the view 
      View listItemView = convertView; 
      if (listItemView == null) { 
       listItemView = LayoutInflater.from(getContext()).inflate(
         R.layout.list_item, parent, false); 
      } 

      Word currentWord = getItem(position); 


      TextView miwokTextView = (TextView) listItemView.findViewById(R.id.miwok_text_view); 

    miwokTextView.setText(currentWord.getMiwokTranslationId()); 


      TextView defaultTextView = (TextView) listItemView.findViewById(R.id.default_text_view); 

      defaultTextView.setText(currentWord.getDefaultTranslationId()); 


      ImageView imageView = (ImageView) listItemView.findViewById(R.id.image); 
      if (currentWord.hasImage()) { 
       // If an image is available, display the provided image based on the resource ID 
       imageView.setImageResource(currentWord.getImageResourceId()); 
       // Make sure the view is visible 
       imageView.setVisibility(View.VISIBLE); 
      } else { 
       // Otherwise hide the ImageView (set visibility to GONE) 
       imageView.setVisibility(View.GONE); 
      } 

      // Set the theme color for the list item 
      View textContainer = listItemView.findViewById(R.id.text_container); 
      // Find the color that the resource ID maps to 
      int color = ContextCompat.getColor(getContext(), mColorResourceId); 
      // Set the background color of the text container View 
      textContainer.setBackgroundColor(color); 

      // Return the whole list item layout (containing 2 TextViews) so that it can be shown in 
      // the ListView. 
      return listItemView; 
     } 
    } 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     WordAdapter adapter = new WordAdapter(getActivity(), new ArrayList<Word>(), R.color.category_phrases); 

     ListView listView = (ListView) findViewById(R.id.list); 

     listView.setAdapter(adapter); 
} 
} 

я пройти пустой ArrayList<Word> в WordAdapter и я бегу мое приложение, приложение показывает мне белый экран (пустой список). Почему приложение не сбой при попытке вызвать метод getView() в адаптере без данных? Как адаптер имеет дело с этим случаем, когда список массивов пуст?

ответ

1

Ну это довольно просто

getView() только вызываются, когда метод count возвращает лагер значения, чем 0

Значения при добавлении пустого ArrayList, ваш count является 0 так не вызов getView() не производится

+0

где я могу найти этот метод, который проверяет, нет ли arraylist или нет? –

+0

Что вы имеете в виду? Сам адаптер проверяет, превышает ли счет больше 0 – Stefan

+0

. Мне нужно знать, есть ли метод, выполняющий эту операцию в документации api? –

Смежные вопросы