私はアクティビティの使用に慣れてから別のレベルに物事を持ちたいので、フラグメントを使い始めました。今まで私が学んだことは断片間でデータを渡すことであり、今はデータベースを含む何かをしようとしています。フラグメント内のデータベースデータをlistviewに取り込む方法は?
これは、この種のものに対処する方法を私に示す、単なるサンプルアプリケーションです。
基本的に私は連絡先を追加するための断片と、リストビュー内の連絡先のファーストネームを示す第2の断片を持っています。私はデータベースに連絡先を追加しており、その部分は正常に動作します。しかし、リストビューを含むフラグメント内のデータベースからデータを表示しようとすると、アプリケーションがクラッシュします。ここで
コードです:
public class MainActivity extends AppCompatActivity implements Contacts_Add.sendData {
DatabaseHandler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new DatabaseHandler(this, null, null, 1);
//____________________________PRINT DATABASE_____________________
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new Contacts_All(), "allFrag");
fragmentTransaction.commit();
getSupportFragmentManager().executePendingTransactions();
Contacts_All fragAll = (Contacts_All) getSupportFragmentManager().findFragmentByTag("allFrag");
fragAll.printDatabase();
//______________________________________________________________________
//etValues method is outside of onCreate I just didnt put the whole code.
@Override
public void etValues(String fname, String lname, String phone, String email) {
ContactsObjects contact = new ContactsObjects(fname, lname, phone, email);
handler.insertContact(contact);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new Contacts_All(), "allFrag");
fragmentTransaction.commit();
getSupportFragmentManager().executePendingTransactions();
Contacts_All fragAll = (Contacts_All) getSupportFragmentManager().findFragmentByTag("allFrag");
fragAll.printDatabase();
}
すべての連絡先のフラグメント:
public class Contacts_All extends ListFragment {
DatabaseHandler handler;
public Contacts_All() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.contacts_all, container, false);
return view;
}
public void printDatabase() {
List<ContactsObjects> contactsList = handler.getAllContacts();
ArrayList<ContactsObjects> newContactsList = new ArrayList<ContactsObjects>();
for (ContactsObjects cn : contactsList) {
newContactsList.add(cn);
}
ListAdapter la = new ArrayAdapter<ContactsObjects>(getActivity(), android.R.layout.simple_list_item_1, newContactsList);
setListAdapter(la);
}
}
DatabaseHandler:
public List<ContactsObjects> getAllContacts() {
List<ContactsObjects> contactList = new ArrayList<ContactsObjects>();
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
ContactsObjects contact = new ContactsObjects();
contact.set_id(Integer.parseInt(cursor.getString(cursor.getColumnIndex("_id"))));
contact.setFirstName(cursor.getString(cursor.getColumnIndex("firstname")));
contact.setLastName(cursor.getString(cursor.getColumnIndex("lastname")));
contact.setPhoneNumber(cursor.getString(cursor.getColumnIndex("phonenumber")));
contact.setEmail(cursor.getString(cursor.getColumnIndex("email")));
contactList.add(contact);
} while (cursor.moveToNext());
}
return contactList;
}
logcatエラー:
: 第一にエラーがこの行でありますList<ContactsObjects> contactsList = handler.getAllContacts();
第二誤差は、この行である:
listfragment(Contacts_Allクラス)ハンドラが初期化されることはありませんのprintDatabase()メソッドでfragAll.printDatabase(); //in onCreate
あなたのハンドラ(データベース)は、リストフラグメントのプリントデータベースメソッドで決して初期化されていません –
私は行方不明のコードで回答を投稿できますか? – Nenco