Java 适配器如何处理android中的空arrayList?
我有以下代码: javaJava 适配器如何处理android中的空arrayList?,java,android,arraylist,Java,Android,Arraylist,我有以下代码: java public class WordAdapter extends ArrayAdapter<Word> { public WordAdapter(Context context, ArrayList<Word> words, int colorResourceId) { super(context, 0, words); mColorResourceId = colorRes
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;
}
}
公共类WordAdapter扩展了ArrayAdapter{
publicWordAdapter(上下文上下文、ArrayList单词、int-colorResourceId){
超级(上下文,0,单词);
mColorResourceId=colorResourceId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//检查是否正在重用现有视图,否则会膨胀视图
View listItemView=convertView;
如果(listItemView==null){
listItemView=LayoutFlater.from(getContext()).inflate(
R.layout.list_项,父项,false);
}
Word currentWord=getItem(位置);
TextView miwokTextView=(TextView)listItemView.findViewById(R.id.miwok\u text\u视图);
setText(currentWord.getMiwoktTranslationId());
TextView defaultTextView=(TextView)listItemView.findViewById(R.id.default\u text\u视图);
defaultTextView.setText(currentWord.getDefaultTranslationId());
ImageView ImageView=(ImageView)listItemView.findViewById(R.id.image);
if(currentWord.hasImage()){
//如果图像可用,则根据资源ID显示提供的图像
setImageResource(currentWord.getImageResourceId());
//确保视图可见
设置可见性(View.VISIBLE);
}否则{
//否则隐藏ImageView(将可见性设置为GONE)
设置可见性(View.GONE);
}
//设置列表项的主题颜色
View textContainer=listItemView.findViewById(R.id.text\u容器);
//查找资源ID映射到的颜色
int color=ContextCompat.getColor(getContext(),mColorResourceId);
//设置文本容器视图的背景色
textContainer.setBackgroundColor(颜色);
//返回整个列表项布局(包含2个文本视图),以便在
//列表视图。
返回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);
}
}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WordAdapter=newWordAdapter(getActivity(),newArrayList(),R.color.category_短语);
ListView ListView=(ListView)findViewById(R.id.list);
setAdapter(适配器);
}
}
我将空的ArrayList
传递给WordAdapter
并运行我的应用程序,应用程序会显示一个白色屏幕(空列表)。在没有数据的适配器中尝试调用getView()
方法时,为什么应用程序没有崩溃?当数组列表为空时,适配器如何处理这种情况???很简单
只有当count
方法返回的值大于0时,才会调用getView()
这意味着当您添加一个空的ArrayList
时,您的计数是0
,因此不会调用getView()
,在那里我可以找到这个检查ArrayList是否为空的方法?您的意思是什么?适配器本身会检查计数是否大于0。我需要知道api文档中是否有执行此操作的方法?您只需要实现getCount()
方法,但不确定要实现什么ArrayList
hasisEmpty()
method感谢您提供了我所需要的,getCount()方法在另一个方法isEmpty()中调用,这决定是否调用getView(),