2016-08-25 1 views
-1

나는 listview를 표시하는 3 액티비티가 있으며 데이터를 표시하기 위해 아이콘과 텍스트 뷰를 표시하는 이미지가 있습니다. 나는이 활동에 대한 나의 listview를 위해 일반을 사용할 수있는 어댑터를 만들고 싶다. 하지만 내 앱을 실행할 때 logcat이 null 포인터 예외를 표시합니다.왜 안드로이드에서 뷰 반환 null

08-25 22 : 43 : 04.090 28942-28942/com.example.xiaoking.dilibus의 A/아트 : 아트/실행/thread.cc : 1,113] 가상 메소드를 호출하려고 '새로운 예외를 발생 부울 android.view.View.isSelected() '예기치 않은 보류중인 예외가있는 null 객체 참조': java.lang.NullPointerException : null 객체 참조에 가상 메소드 'int android.view.View.ViewImportantForAccessibility()'를 호출하려고 시도했습니다

이 오류는 내 convertview 반환 null입니다. 하지만 왜 고칠 수 있을지 모르겠다. 나는이 기능에 문제가 발견

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; 
} 
+0

View.isSelected 메소드를 호출 한 활동 코드를 표시하십시오. 난 isSelected 메서드를 호출하기 전에 정의 된 뷰가 누락되었다고 생각합니다. –

+0

@ HoàngVũNam 방금 내 질문을 편집했습니다. 나는 활동에 문제가 있다고 생각하지 않는다. Bcuz 목록보기가 하나의 목록 객체 만로드하도록 코드를 편집하면 완벽하게 실행됩니다. –

+0

방금 ​​내 대답을 추가했습니다. 하자 체크 : http://stackoverflow.com/questions/7893492/is-java-really-passing-objects-by-value –

답변

0

: 여기

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(); 
    } 
} 

내 활동 : 여기

내 어댑터입니다

getObject(city,position,convertView,parent); 

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

convertView == null의 경우, getObject 메소드로 convertView에 새로운 값이 할당된다.

그러나 convertView는 getObject 메소드에서만 값을 가지며 getView에서는 getObject (city, position, convertView, parent) 아래에 있습니다. convertView가 null입니다.

+0

고마워요, 귀하의 문제가 정확하고 그 해결책은 getObject 반환보기 :)입니다. 정말 고마워. –

+0

당신을 도울 수있어서 좋네요 : D –