1

何が間違っているのですか?NullPointerExceptionが間違ったコンテキストですか?

list_item

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="?android:attr/activatedBackgroundIndicator"> 


    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:src="@drawable/no_avatar"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/name" 
     android:layout_gravity="top|center_horizontal" 
     android:layout_marginLeft="10dp"/> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/checkbox" 
     android:id="@+id/checkBox" 
     android:clickable="true" 
     android:paddingLeft="@dimen/abc_action_bar_overflow_padding_start_material" 
     android:singleLine="false" 
     android:textAppearance="@color/colorAccent" 
     android:layout_gravity="right" /> 
</LinearLayout> 

fragment_list

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/rootLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/listView" 
      android:layout_margin="@dimen/activity_vertical_margin"/> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_add_white_24dp" 
     app:layout_anchor="@id/listView" 
     app:layout_anchorGravity="bottom|right|end" 
     app:elevation="6dp" 
     app:pressedTranslationZ="12dp" 
     app:backgroundTint="@color/colorAccent" 
     app:rippleColor="@color/colorPrimary"/> 
</android.support.design.widget.CoordinatorLayout> 

FragmentList.java

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.fragment_list, container, false); 
    fab = (FloatingActionButton) getView().findViewById(R.id.fab); 
    listView = (ListView) v.findViewById(R.id.listView); 


    //обработка добавления человека - нажатие на fab 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override public void onClick(View v) { 
      //TODO добавление!!! 
      Toast.makeText(v.getContext(), "Новая запись добавлена", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    //создание курсора 
try{ 
    SQLiteOpenHelper databaseHelper = new DatabaseHelper(v.getContext()); 
    SQLiteDatabase db = databaseHelper.getWritableDatabase(); 
    Cursor cursor = db.query("PEOPLE", new String[] {"_id", "NAME", "CHECKBOX"}, null, null, null, null, null); 
    CursorAdapter listAdapter = new SimpleCursorAdapter(v.getContext(), R.layout.list_item, cursor, new String[]{"NAME", "CHECKBOX"}, new int[]{R.id.name, R.id.checkBox}, 0); 
     listView.setAdapter(listAdapter); 
     //переход к первой записи в курсоре 
     if (cursor.moveToFirst()){ 
      //получение данных из курсора 
      nameText = cursor.getString(1); 
      isAvatar = (cursor.getInt(2)==1); 
      //заполнение чекбокса, тест имени и аватар 
      CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkBox); 
      TextView textView = (TextView) v.findViewById(R.id.name); 
      ImageView image = (ImageView) v.findViewById(R.id.imageView); 
      checkBox.setChecked(isAvatar); 
      textView.setText(nameText); 
      if (checkBox.isChecked()) { 
       image.setImageResource(R.drawable.avatar); 
      } else image.setImageResource(R.drawable.no_avatar); 
     } 
    } catch (SQLiteException e){ 
     Toast.makeText(v.getContext(), "База данных недоступна", Toast.LENGTH_SHORT).show(); 
    } 

     //обработка нажатия по чекбоксу 
//  checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ 
//   @Override 
//   public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
//    checkBox.isChecked(); 
//   } 
//  }); 

     return v; 
} 





//обработка нажатия пункте списка 
public void onListItemClick(){ 

} 

//закрытие базы данных и курсора 
@Override 
public void onDestroy(){ 
    super.onDestroy(); 
    cursor.close(); 
    db.close(); 
} 

}

なぜチェックボックスするcheckBox =(チェックボックス)v.findViewById(R.id。 checkBox)がnullの場合? は、私は(

debug screenshot

+0

スクリーンショットを貼り付けることに感謝しますが、実際のスタックトレースも貼り付けてください。 – ishmaelMakitla

+0

java.lang.NullPointerException at ru.bunakov.testapplication.fragments.FragmentList.onCreateView(FragmentList.java:46) –

+0

完全なスタックトレースには95000個以上のシンボルがあります –

答えて

0

あなたは、チェックボックス、ImageViewのか、テキストビューが含まれていませんfragment_listレイアウトを膨らませている(多くのバリエーションを試してみましたが、愚かになりました。あなたは、このエラーを得ている理由です。 このカーソルアダプタを実装

public class MyCursorAdapter extends CursorAdapter { 

    public MyCursorAdapter(Context context, Cursor cursor, int flags) { 
     super(context, cursor, 0); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     return LayoutInflater.from(context).inflate(R.layout.mylist_row, parent, false); 
    } 

    @Override 
    public void bindView(View v, Context context, Cursor cursor) { 

     if (cursor.moveToFirst()){ 
      //получение данных из курсора 
      nameText = cursor.getString(1); 
      isAvatar = (cursor.getInt(2)==1); 
      //заполнение чекбокса, тест имени и аватар 
      CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkBox); 
      TextView textView = (TextView) v.findViewById(R.id.name); 
      ImageView image = (ImageView) v.findViewById(R.id.imageView); 
      checkBox.setChecked(isAvatar); 
      textView.setText(nameText); 
      if (checkBox.isChecked()) { 
       image.setImageResource(R.drawable.avatar); 
      } else image.setImageResource(R.drawable.no_avatar); 
     } 

    } 

} 
onCreateview

で今

MyCursorAdapter todoAdapter = new MyCursorAdapter(this.getActivity(), cursor, 0); 
     lvItems.setAdapter(todoAdapter); 
+0

私はそれを修正するために何をしなければなりませんか?私をサポートできますか? –

+0

更新された回答を参照してください。カーソルアダプターを実装しました。 –

+0

SimpleCursorAdapterではなくCursorAdapterを実装するのはなぜですか? –

0

あなたはトイレですアップcheckBoxビュー(v)の王:CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkBox);はまだv​​こちら(fragment_list)に割り当てられているが、そうv.findViewById(R.id.checkBox)リターンがをゼロcheckBoxfragment_list含まれていません。 SimpleCursorAdapterを使用するときは、SimpleCursorAdapterを継承するクラスを作成する必要があります。getView (final int pos, View view, ViewGroup parent)の "row-item"レイアウトファイルにアクセス/拡張すると、CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox)と言うことができます。 。

+0

私はこのケースで自分のアダプタを作る方法を理解できません。いくつかのコード例を私に書くことができますか? –

+0

私はこの問題で6時間以上を費やしてしまいました。 –

+0

[カスタムカーソルアダプタの作成方法のこの簡単な例](http://blog.cluepusher.dk/2009/11/16/creating-a -custom-cursoradapter-for-android /) - また、[この例](http://stackoverflow.com/questions/21519893/any-good-example-for-checkbox-with-simplecursoradapter)を見てください。別の機能では、これはアダプタにチェックボックスを含める方法を示しています - あなたの場合、私はチェックボックスがチェックされている/チェックされていないと仮定しています – ishmaelMakitla

関連する問題