私は、リストビューを表示する3つのアクティビティがあり、アイコンとテキストビューを表示してデータを表示するイメージがあります。私は、これらのアクティビティで自分のリストビューに一般的に使用できるアダプタを作成したいと考えています。しかし、私は私のアプリを実行すると、logcatは私にnullポインタの例外を表示します。なぜ、ビューは、アンドロイドでnullを返す
8月25日22:43:04.090 28942から28942/com.example.xiaoking.dilibusのA /技術:技術/実行/ thread.cc:1113] '仮想メソッドを起動しようとする' 新しい例外をスローするブールandroid.view.View.isSelected() '予期しない保留中の例外を伴うnullオブジェクト参照':java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'int android.view.View.getImportantForAccessibility()'を呼び出そうとしました
このエラーの理由はわかります。私のconvertviewはnullを返します。しかし、私はなぜそれを修正できるのか分かりません。ここで
は私のアダプタです:
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;
}
View.isSelectedメソッドを呼び出したアクティビティコードを示してください。私はisSelectedメソッドを呼び出す前に定義ビューが不足していたと思います。 –
@HoàngVNam私はちょうど私の質問を編集しました。私は活動に問題がないと思います。 Bcuzリストビューが1つのリストオブジェクトだけをロードするようにコードを編集すると、完全に実行されます。 –
私はちょうど私の答えを追加しています。チェックしてみましょう:http://stackoverflow.com/questions/7893492/is-java-really-passing-objects-by-value –