2014-11-21 3 views
0

В настоящее время я участвую в создании приложения для Android, и я использую Android Studio для этого.Содержимое вкладки Android не отображается

Я искал аналогичные должности, но не нашел, что могло мне помочь.

Моя цель - иметь активность с tabHost и 4 вкладками (на данный момент). Я положу код после предоставления некоторых деталей. Чтобы начать, я просто сосредоточен на двух вкладках, на которых я хотел бы: - положить кнопку для запуска (на первой вкладке) выделенного действия для создания элемента (контактного элемента), - отобразить список контактов на второй вкладке.

Моя проблема: кнопка правильно видна и отлично работает (я могу создать контакт). У меня также есть функция, проверяющая, что контакт уже существует или нет (правильно работает). Что не работает, когда я выбираю вторую вкладку, мой список не будет отображаться, и я не вижу своих контактов.

Это мой Общая активность:

package avappmobile.fourwe; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TabHost; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 


public class General extends Activity { 

    List<Contact> Contacts = new ArrayList<Contact>(); 
    List<Stuff> Stuffs = new ArrayList<Stuff>(); 
    List<Money> Moneys = new ArrayList<Money>(); 
    ListView contactListView; 
    DatabaseContactHandler dbContactHandler; 
    DatabaseMoneyHandler dbMoneyHandler; 
    DatabaseStuffHandler dbStuffHandler; 

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

     TabHost tabHost = (TabHost) findViewById(R.id.tabHost); 
     contactListView = (ListView) findViewById(R.id.listViewContact); 

     dbContactHandler = new DatabaseContactHandler(getApplicationContext()); 
     dbMoneyHandler = new DatabaseMoneyHandler(getApplicationContext()); 
     dbStuffHandler = new DatabaseStuffHandler(getApplicationContext()); 

     tabHost.setup(); 

     TabHost.TabSpec tabSpec = tabHost.newTabSpec("home"); 
     tabSpec.setContent(R.id.tabHome); 
     tabSpec.setIndicator("Home"); 
     tabHost.addTab(tabSpec); 

     tabHost.newTabSpec("contact"); 
     tabSpec.setContent(R.id.tabContact); 
     tabSpec.setIndicator("Contact"); 
     tabHost.addTab(tabSpec); 

     tabHost.newTabSpec("money"); 
     tabSpec.setContent(R.id.tabMoney); 
     tabSpec.setIndicator("Money"); 
     tabHost.addTab(tabSpec); 

     tabHost.newTabSpec("stuff"); 
     tabSpec.setContent(R.id.tabStuff); 
     tabSpec.setIndicator("Stuff"); 
     tabHost.addTab(tabSpec); 

     if (dbContactHandler.getContactsCount() != 0) 
      Contacts.addAll(dbContactHandler.getAllContacts()); 

     populateList(); 
    } 


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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    public void goToContactCreation(View view) { 
     Intent intent = new Intent(this, ContactCreation.class); 
     startActivity(intent); 
    } 

    //Contact 

    private void populateList() { 
     ArrayAdapter<Contact> adapter = new ContactListAdapter(); 
     contactListView.setAdapter(adapter); 
    } 

    private class ContactListAdapter extends ArrayAdapter<Contact> { 
     public ContactListAdapter() { 
      super (General.this, R.layout.contact_listview, Contacts); 
     } 

     @Override 
     public View getView(int position, View view, ViewGroup parent) { 
      if (view == null) 
       view = getLayoutInflater().inflate(R.layout.contact_listview, parent, false); 

      Contact currentContact = Contacts.get(position); 

      TextView firstName = (TextView) view.findViewById(R.id.txtFirstName); 
      firstName.setText(currentContact.getFirstName()); 
      TextView lastName = (TextView) view.findViewById(R.id.txtLastName); 
      lastName.setText(currentContact.getLastName()); 

      return view; 
     } 
    } 
} 

Мой DbContactHandler:

package avappmobile.fourwe; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by a.vescera on 13/11/2014. 
*/ 
public class DatabaseContactHandler extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 

    private static final String DATABASE_NAME = "fourWe", 
      TABLE_CONTACTS = "contacts", 
      KEY_ID = "id", 
      KEY_FIRSTNAME = "firstName", 
      KEY_LASTNAME = "lastName", 
      KEY_PHONE = "phone", 
      KEY_EMAIL = "email", 
      KEY_MONEYLEND = "moneyLend", 
      KEY_MONEYBORROWED = "moneyBorrowed", 
      KEY_STUFFLEND = "stuffLend", 
      KEY_STUFFBORROWED = "stuffBorrowed"; 

    public DatabaseContactHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_FIRSTNAME + " TEXT," + 
       KEY_LASTNAME + " TEXT," + KEY_PHONE + " TEXT," + KEY_EMAIL + " TEXT," + KEY_MONEYLEND + " INTEGER," + KEY_MONEYBORROWED + " INTEGER," + 
       KEY_STUFFLEND + " INTEGER," + KEY_STUFFBORROWED + " INTEGER)"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 

     onCreate(db); 
    } 

// Method to create a contact. 
    public void createContact(Contact contact) { 
     SQLiteDatabase db = getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put(KEY_FIRSTNAME, contact.getFirstName()); 
     values.put(KEY_LASTNAME, contact.getLastName()); 
     values.put(KEY_PHONE, contact.getPhone()); 
     values.put(KEY_EMAIL, contact.getEmail()); 
     values.put(KEY_MONEYLEND, 0); 
     values.put(KEY_MONEYBORROWED, 0); 
     values.put(KEY_STUFFLEND, 0); 
     values.put(KEY_STUFFBORROWED, 0); 

     db.insert(TABLE_CONTACTS, null, values); 
     db.close(); 
    } 

// Method to get the details of a specific contact by an id. 
    public Contact getContactId(int id) { 
     SQLiteDatabase db = getReadableDatabase(); 

     Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, KEY_FIRSTNAME, KEY_LASTNAME, KEY_PHONE, KEY_EMAIL, KEY_MONEYLEND, 
       KEY_MONEYBORROWED, KEY_STUFFLEND, KEY_STUFFBORROWED }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null); 

     if (cursor != null) 
      cursor.moveToFirst(); 

     Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), 
       Integer.parseInt(cursor.getString(5)),Integer.parseInt(cursor.getString(6)),Integer.parseInt(cursor.getString(7)),Integer.parseInt(cursor.getString(8))); 
     db.close(); 
     cursor.close(); 
     return contact; 
    } 

// Method to get the details of a specific contact by firstName and lastName. 
    public Boolean getContact(String firstName, String lastName) { 
     SQLiteDatabase db = getReadableDatabase(); 
     Contact contact; 

     Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, KEY_FIRSTNAME, KEY_LASTNAME, KEY_PHONE, KEY_EMAIL, KEY_MONEYLEND, 
       KEY_MONEYBORROWED, KEY_STUFFLEND, KEY_STUFFBORROWED }, KEY_FIRSTNAME + "=?" + " AND " + KEY_LASTNAME + "=?", new String[] { firstName, lastName }, null, null, null, null); 

     if (cursor != null && cursor.moveToFirst()) { 
      db.close(); 
      cursor.close(); 
      return true; 
     } else { 
      db.close(); 
      cursor.close(); 
      return false; 
     } 
    } 

// Method to delete a specific contact. 
    public void deleteContact(Contact contact) { 
     SQLiteDatabase db = getWritableDatabase(); 
     db.delete(TABLE_CONTACTS, KEY_ID + "=?", new String[] { String.valueOf(contact.getId()) }); 
     db.close(); 
    } 

// Method to get the total number of existing contacts into the DB. 
    public int getContactsCount() { 
     SQLiteDatabase db = getReadableDatabase(); 
     Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS, null); 
     int count = cursor.getCount(); 
     db.close(); 
     cursor.close(); 

     return count; 
    } 

// Method to update the details of a specific contact. 
    public int updateContact(Contact contact) { 
     SQLiteDatabase db = getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put(KEY_FIRSTNAME, contact.getFirstName()); 
     values.put(KEY_LASTNAME, contact.getLastName()); 
     values.put(KEY_PHONE, contact.getPhone()); 
     values.put(KEY_EMAIL, contact.getEmail()); 
     values.put(KEY_MONEYLEND, contact.getMoneyLend()); 
     values.put(KEY_MONEYBORROWED, contact.getMoneylBorrowed()); 
     values.put(KEY_STUFFLEND, contact.getStuffLend()); 
     values.put(KEY_STUFFBORROWED, contact.getStuffBorrowed()); 

     int rowsAffected = db.update(TABLE_CONTACTS, values, KEY_ID + "=?", new String[] { String.valueOf(contact.getId()) }); 
     db.close(); 

     return rowsAffected; 
    } 

// Method to get the list of the details of all the contacts present into the DB. 
    public List<Contact> getAllContacts() { 
     List<Contact> contacts = new ArrayList<Contact>(); 

     SQLiteDatabase db = getWritableDatabase(); 
     Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS, null); 

     if (cursor.moveToFirst()) { 
      do { 
       contacts.add(new Contact(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), 
         Integer.parseInt(cursor.getString(5)),Integer.parseInt(cursor.getString(6)),Integer.parseInt(cursor.getString(7)),Integer.parseInt(cursor.getString(8)))); 
      } 
      while (cursor.moveToNext()); 
     } 
     cursor.close(); 
     db.close(); 
     return contacts; 
    } 
} 

Я не ставлю деталь Контактной класса, но если вы думаете, что это нужно, пожалуйста, не стесняйтесь Спроси меня.

Затем я поставил дизайн часть моей основной деятельности:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="avappmobile.fourwe.General"> 

    <TabHost 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/tabHost"> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical"> 

      <TabWidget 
       android:id="@android:id/tabs" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"></TabWidget> 

      <FrameLayout 
       android:id="@android:id/tabcontent" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

       <LinearLayout 
        android:id="@+id/tabHome" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical"> 

        <Button 
         style="?android:attr/buttonStyleSmall" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/new_contact" 
         android:id="@+id/btnNewContact" 
         android:onClick="goToContactCreation" 
         android:enabled="true" 
         android:layout_gravity="right" /> 
       </LinearLayout> 

       <LinearLayout 
        android:id="@+id/tabContact" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical"> 

        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:textAppearance="?android:attr/textAppearanceLarge" 
         android:text="@string/contacts_list" 
         android:id="@+id/txtMyContacts" 
         android:layout_gravity="center_horizontal" 
         android:layout_marginTop="10dp" /> 

        <ListView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:id="@+id/listViewContact" 
         android:layout_marginTop="20dp" /> 
       </LinearLayout> 

       <LinearLayout 
        android:id="@+id/tabMoney" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical"></LinearLayout> 

       <LinearLayout 
        android:id="@+id/tabStuff" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical"></LinearLayout> 

      </FrameLayout> 

     </LinearLayout> 
    </TabHost> 
</LinearLayout> 

И макет, созданный, чтобы отобразить мои контакты на secont Tab.

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/first_name_contact" 
     android:id="@+id/txtFirstName" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:id="@+id/txtLastName" 
     android:layout_gravity="center_horizontal" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="@string/first_name_contact" 
     android:singleLine="false" /> 

</RelativeLayout> 

Спасибо.

ответ

0

После дальнейшего изучения в Интернете я обнаружил, что с последней версией Android может оказаться более интересным показать файл с вкладкой (и каждой вкладкой с другим файлом, что является моей целью) с помощью ViewPager.

Быстрое и правильно заданное учебное пособие можно найти здесь: http://architects.dzone.com/articles/android-tutorial-using.

Затем я закрываю свою тему, так как теперь я сосредоточен на этом способе выполнения своей работы.

С уважением.

Смежные вопросы