ListView: настройка SimpleCursorAdapter перезаписывает текущий ContentView - PullRequest
0 голосов
/ 31 июля 2011

Я очень плохо знаком с Android SDK, но мне удалось создать макет Dashboard, и сейчас я нахожусь в процессе создания классов / макетов действий за каждой кнопкой на панели инструментов. У меня есть событие click, запускающее и запускающее связанное действие кнопки и т.д. (1 действие на кнопку). У меня также есть заголовок на каждом макете деятельности, который позволяет вернуться к главной панели инструментов, настройкам и т. Д. Базовый внешний вид. До этого момента все работало отлично. Я сейчас пытаюсь использовать ListView на макетах деятельности для отображения данных из локальной базы данных (sqlite).

В моем методе onCreate () я использую SimpleCursorAdapter, чтобы попытаться привязать курсор (результат SQL) к ListView в моем макете. Я на самом деле использую 2 макета здесь на основе учебника, который я сделал ранее (Блокнот). 2-й макет для каждой «строки», присутствующей в курсоре. Проблема в том, что после того, как я установил макет в SimpleCursorAdapter для этого второго макета, я теряю функциональность заголовка в моем первом макете. И, очевидно, если я попытаюсь повторить код заголовка во втором макете, он будет повторяться с каждым экземпляром в курсоре.

Кроме того - все мои "под" классы активности наследуются от базового класса (FunDashboardActivity), который наследуется от Activity. Я не могу использовать ListActivity в качестве базового класса из-за моего дизайна. Опять же - я совершенно новичок в Android и буду очень признателен за любые отзывы / помощь. Заранее спасибо.

Это мой код активности:

public class FunSitesActivity extends FunDashboardActivity {

    private int mSiteNumber = 1;
    private FunDbAdapter mDbHelper;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_sites);
        mDbHelper = new FunDbAdapter(this);
        mDbHelper.open();
        fillData();
    }

    private void fillData() {

        // Get Site Data Stored
        Cursor c = mDbHelper.fetchAllSites();
        startManagingCursor(c);

        // Create Cursor Adapter
        String[] from = new String[] { FunDbAdapter.KEY_SITE };
        int[] to = new int[] { R.id.text1 };
        SimpleCursorAdapter notes =
            new SimpleCursorAdapter(this, R.layout.site_row, c, from, to);

        // Create ListView & Set Cursor
        ListView lv = new ListView(this);
        lv.setAdapter(notes);
        setContentView(lv);  
    }

// act_site xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <LinearLayout style="@style/TitleBar">
        <ImageButton style="@style/TitleBarAction"
            android:src="@drawable/title_home"
            android:contentDescription="@string/description_about"
            android:onClick="onClickHome" />
        <ImageView style="@style/TitleBarSeparator" />
        <TextView style="@style/TitleBarText" />
        <ImageButton style="@style/TitleBarAction"
            android:contentDescription="@string/description_config"
            android:src="@drawable/title_config"
            android:onClick="onClickConfig" />
        <ImageButton style="@style/TitleBarAction"
            android:contentDescription="@string/description_about"
            android:src="@drawable/title_about"
            android:onClick="onClickAbout" />
    </LinearLayout>

    <ListView 
        android:id="@+id/sitelist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView 
        android:id="@+id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/no_sites"/>
</LinearLayout>

// site_row xml

<?xml version="1.0" encoding="utf-8"?>
    <TextView android:id="@+id/text1"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>  

1 Ответ

0 голосов
/ 01 августа 2011

Думаю, я понял это.Проблема была в моем методе fillData, где я устанавливал contentView для нового экземпляра ListView.См. Новый код ниже

    private void fillData() {

        // Get Site Data Stored
        Cursor c = mDbHelper.fetchAllSites();
        startManagingCursor(c);

        // Create Cursor Adapter
        String[] from = new String[] { JAMDbAdapter.KEY_SITE };
        int[] to = new int[] { R.id.text1 };
        SimpleCursorAdapter notes =
            new SimpleCursorAdapter(this, R.layout.site_row, c, from, to);

        // Create ListView & Set Cursor 
        // NEW APPROACH
        ListView lv = (ListView) findViewById(R.id.sitelist);
        lv.setAdapter(notes);

        // OLD APPROACH
        //ListView lv = new ListView(this);
        //lv.setAdapter(notes);
        //setContentView(lv);
    }

Я не уверен, является ли это «лучшим» подходом к тому, чего я пытаюсь достичь, поэтому любая / все отзывы будут С благодарностью оценены.

...