Mokkapps
Mokkapps

Reputation: 2028

Using SQLite with ListFragment makes problems

I am using a ListFragment to show data from a database. But the data is not shown correctly.

Inside my Fragment I add an contact to the SQLite database after the user has clicked on an ActionBar item and inserted a name:

//Handle OnClick events on ActionBar items
@Override
public boolean onOptionsItemSelected(MenuItem item) {
   // handle item selection
   switch (item.getItemId()) {
      case R.id.menu_add:
         Toast.makeText(getActivity(), "Click", Toast.LENGTH_SHORT).show();

         LayoutInflater factory = LayoutInflater.from(getActivity());

         //textEntryView is an Layout XML file containing text field to display in alert dialog
         textEntryView = factory.inflate(R.layout.dialog_add_room, null);       

         //get the control from the layout      
         enter_room = (EditText) textEntryView.findViewById(R.id.enter_room);

         //create Dialog
         final AlertDialog.Builder alert1 = new AlertDialog.Builder(getActivity());
         //configure dialog
         alert1.setTitle("Raum hinzufügen:").setView(textEntryView)
         .setPositiveButton("Hinzufügen",
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,
                    int whichButton) {
                String roomname = enter_room.getText().toString();

                Log.d("Insert: ", "Inserting ..");
                dbHandler.addContact(new Contact(roomname, "0"));

                adapter.notifyDataSetChanged();
            }
         }).setNegativeButton("Abbrechen",
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,
                    int whichButton) {
                //cancel dialog
            }
         });
         alert1.show();          
         return true;
      default:
         return super.onOptionsItemSelected(item);
   }
}

Then I want to get all the contacts and show them in the ListFragment with this code:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //display ActionBar items
        setHasOptionsMenu(true);

        //database
        dbHandler = new DatabaseHandler(getActivity());

        //get all contacts
        contacts = dbHandler.getAllContacts();

        adapter = new ArrayAdapter<Contact>(getActivity(),
                android.R.layout.simple_list_item_activated_1,
                android.R.id.text1, contacts);

        adapter.setNotifyOnChange(true);

        //show all contacts in the ListFragment
        setListAdapter(adapter);
    }

The getAllContacts() from my DatabaseHandler:

// Getting All Contacts
public List<Contact> getAllContacts() {
    List<Contact> contactList = new ArrayList<Contact>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Contact contact = new Contact();
            contact.setID(Integer.parseInt(cursor.getString(0)));
            contact.setName(cursor.getString(1));
            contact.setPhoneNumber(cursor.getString(2));
            // Adding contact to list
            contactList.add(contact);
        } while (cursor.moveToNext());
    }

    // return contact list
    return contactList;
}

But inside my ListFragment the following is shown:

com.example.fragmentmasterdetail.sqlite.Contact@21059ed8

I would like to see the name of the contact. Anyone an idea?

Upvotes: 0

Views: 838

Answers (1)

ianhanniballake
ianhanniballake

Reputation: 199805

Per the ArrayAdapter documentation:

However the TextView is referenced, it will be filled with the toString() of each object in the array. You can add lists or arrays of custom objects. Override the toString() method of your objects to determine what text will be displayed for the item in the list.

Therefore to get custom text into your list, add a toString() method to your Contact class:

public String toString()
{
    return name;
}

Upvotes: 3

Related Questions