为什么视图在Android中返回null [英] Why view return null in android

查看:112
本文介绍了为什么视图在Android中返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有3个活动显示listview,并且有一个图像显示图标和textview显示数据.我想制作一个可以在这些活动的列表视图中使用常规的适配器.但是当我运行我的应用程序时,logcat向我显示了空指针异常.

I have 3 activity that display listview and it has an image to display icon and textview to display data. I want to make an adapter that can use general for my listview on these activity. But when I run my app, the logcat show me null pointer exception.

08-25 22:43:04.090 28942-28942/com.example.xiaoking.dilibus A/art:art/runtime/thread.cc:1113]引发新异常'试图调用虚拟方法'boolean android.view .View.isSelected()在空对象引用上",带有意外的未决异常:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法"int android.view.View.getImportantForAccessibility()"

08-25 22:43:04.090 28942-28942/com.example.xiaoking.dilibus A/art: art/runtime/thread.cc:1113] Throwing new exception 'Attempt to invoke virtual method 'boolean android.view.View.isSelected()' on a null object reference' with unexpected pending exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference

我知道此错误的原因是我的convertview返回null.但是我不知道为什么以及如何解决它?

I know reason for this error is my convertview return null. But I don't know why and how I can fixed it?.

这是我的适配器:

List listObjects;
Context context;
ViewHolder viewHolder;
int typeOfObject;

public CustomCityAdapter(Context context, List objects) {
    this.listObjects  = objects;
    this.context = context;
}

public CustomCityAdapter(Context context, List objects, int typeOfObject) {
    this.listObjects  = objects;
    this.context = context;
    this.typeOfObject = typeOfObject;
}

public void setArrayListCity(List listObjects) {
    this.listObjects = listObjects;
}

@Override
public int getCount() {
    return listObjects.size();
}

@Override
public Object getItem(int position) {
    return listObjects.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    City city = new City();
    getObject(city,position,convertView,parent);
    viewHolder.textView.setText(city.getCityName());
    return convertView;
}

private void getObject(Object object, int position, View convertView,ViewGroup parent){
     object = getItem(position);
    if(convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.custom_cell_list_cities, parent, false);
        viewHolder = new ViewHolder();
        viewHolder.textView = (TextView) convertView.findViewById(R.id.tv_cell_item_city);
        convertView.setTag(viewHolder);
    }
    else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
}

这是我的活动:

Toolbar toolbar;
CustomCityAdapter myAdapter;
ArrayList<City> arrCities = new ArrayList<City>();
CustomListView myListView;
CoordinatorLayout viewCoordinatorLayout;
boolean isDownloadSuccess  = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_choosing_city);
    findViewByID();
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    loadCityToListView();
    //downloadAndInsertCityToDB();
    myListView.setCities(arrCities);
    myListView.myListViewSetOnClickListener(this, SearchingTicketActivity.RESULT_CODE_SAVE);
    Log.d("Test","OncreateChoosing");
}

@Override
protected void onResume() {
    super.onResume();
    loadCityToListView();
}

@Override
public void findViewByID() {
    toolbar = (Toolbar) findViewById(R.id.choosing_city_activity_toolbar);
    myListView = (CustomListView)findViewById(R.id.lv_cities);
    viewCoordinatorLayout = (CoordinatorLayout)findViewById(R.id.coordinatorLayoutChoosing);
}

@Override
public void setOnClickListener() {
    super.setOnClickListener();
}

private void loadCityToListView() {
    arrCities = DiLiBusDatabaseHelper.getInstance(this).getListCities();
    // CustomListView myListView = new CustomListView(this);
    myAdapter = new CustomCityAdapter(this, arrCities);
    myListView.setAdapter(myAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_choosing_city, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setMaxWidth(Integer.MAX_VALUE);
    searchView.setOnQueryTextListener(this);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}

@Override
public boolean onQueryTextSubmit(String query) {
    return true;
}

@Override
public boolean onQueryTextChange(String newText) {

    return setOnQueryTextListenerSearchView(newText);
}

@Override
protected void onDestroy() {
    super.onDestroy();
}

@Override
protected boolean setOnQueryTextListenerSearchView(String query) {
    if (query.equals("")) {
        arrCities = DiLiBusDatabaseHelper.getInstance(this).getListCities();
        myAdapter.setArrayListCity(arrCities);
        myAdapter.notifyDataSetChanged();
        myListView.setCities(arrCities);
        return true;
    }
    arrCities = DiLiBusDatabaseHelper.getInstance(this).getListCityByName(query);
    myAdapter.setArrayListCity(arrCities);
    myAdapter.notifyDataSetChanged();
    myListView.setCities(arrCities);
    Log.d("List Size: ", arrCities.size() + "");
    return true;
}

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

推荐答案

我在此函数中发现问题:

I found problem in this function:

getObject(city,position,convertView,parent);

convertView = LayoutInflater.from(context).inflate(R.layout.custom_cell_list_cities, parent, false);

如果convertView == null,则在getObject方法中,将为convertView分配新值.

If convertView == null, in getObject method, convertView will be assigned new value.

但是convertView仅在getObject方法和getView中位于getObject(city,position,convertView,parent)下的值; ,convertView为null.

But convertView is only has value in getObject method, and in getView, below getObject(city,position,convertView,parent); , convertView is null.

这篇关于为什么视图在Android中返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆