2016-08-11 2 views
0

Я пытаюсь использовать SQLite во фрагменте. Но всегда ошибка. Я знаю, что мой синтаксис невелик, и я должен сохранять объект Party, а не прямо из интерфейса фрагмента, но основное внимание уделяется процессу. Любая помощь будет очень полезна! Вот мой код. Я пытаюсь использовать getActivity(), но не работает.Android SQLite с использованием фрагмента

public class DataHelper extends SQLiteOpenHelper { 

private static final String DATABASE_NAME = "biodatadiri.db"; 
private static final int DATABASE_VERSION = 1; 
public DataHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    String sql = "create table biodata(no integer primary key, nama text null, tgl text null, jk text null, alamat text null);"; 
    Log.d("Data", "onCreate: " + sql); 
    db.execSQL(sql); 
    sql = "INSERT INTO biodata (no, nama, tgl, jk, alamat) VALUES ('1001', 'Fathur', '1994-02-03', 'Laki-laki','Jakarta');"; 
    db.execSQL(sql); 

} 

@Override 
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 

} 

А вот экран интерфейса:

public class UserFragment extends Fragment { 

String[] daftar; 
ListView ListView01; 
Menu menu; 
protected Cursor cursor; 
DataHelper dbcenter; 
public static UserFragment ma; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.user_fragment); 

    Button btn=(Button)findViewById(R.id.button2); 

    btn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      Intent inte = new Intent(UserFragment.this, BuatBiodata.class); 
      startActivity(inte); 
     } 
    }); 


    ma = this; 
    dbcenter = new DataHelper(this); 
    RefreshList(); 
} 

public void RefreshList(){ 
    SQLiteDatabase db = dbcenter.getReadableDatabase(); 
    cursor = db.rawQuery("SELECT * FROM biodata",null); 
    daftar = new String[cursor.getCount()]; 
    cursor.moveToFirst(); 
    for (int cc=0; cc < cursor.getCount(); cc++){ 
     cursor.moveToPosition(cc); 
     daftar[cc] = cursor.getString(1).toString(); 
    } 
    ListView01 = (ListView)findViewById(R.id.listView1); 
    ListView01.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, daftar)); 
    ListView01.setSelected(true); 
    ListView01.setOnItemClickListener(new OnItemClickListener() { 


     public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { 
      final String selection = daftar[arg2]; //.getItemAtPosition(arg2).toString(); 
      final CharSequence[] dialogitem = {"Lihat Biodata", "Update Biodata", "Hapus Biodata"}; 
      AlertDialog.Builder builder = new AlertDialog.Builder(UserFragment.this); 
      builder.setTitle("Pilihan"); 
      builder.setItems(dialogitem, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int item) { 
        switch(item){ 
         case 0 : 
          Intent i = new Intent(getApplicationContext(), LihatBiodata.class); 
          i.putExtra("nama", selection); 
          startActivity(i); 
          break; 
         case 1 : 
          Intent in = new Intent(getApplicationContext(), UpdateBiodata.class); 
          in.putExtra("nama", selection); 
          startActivity(in); 
          break; 
         case 2 : 
          SQLiteDatabase db = dbcenter.getWritableDatabase(); 
          db.execSQL("delete from biodata where nama = '"+selection+"'"); 
          RefreshList(); 
          break; 
        } 
       } 
      }); 
      builder.create().show(); 
     }}); 
    ((ArrayAdapter)ListView01.getAdapter()).notifyDataSetInvalidated(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

Вот ошибка из Android Studio.

Error:(81, 25) error: method updateDisplay in class MainMenu cannot be applied to given types; required: Fragment found: UserFragment reason: actual argument UserFragment cannot be converted to Fragment by method invocation conversion

Я использую случай MainMenu.java

case R.id.navigation_item_user: 
        updateDisplay(new UserFragment()); 
        break; 

Кто-нибудь? Спасибо за вашу помощь :) Извините за плохой английский

+0

опубликовать LogCat –

+0

У вас проблемы с настройкой правильного контекста? – Sush

+0

какая линия вы получаете ошибку также сообщение logcat –

ответ

0
setContentView(R.layout.user_fragment); // this call should be made only activity. 

In Fragments you need to override onCreateView method to setup view. In this return the view that you show it in fragment

Лучший объяснил здесь

  1. fragments with transactions

  2. usage

+0

Можете ли вы объяснить на примере? –