Отображение результатов курсора из БД в ListView после OnItemClick - PullRequest
1 голос
/ 10 декабря 2010

У меня есть действие, в котором я хочу, чтобы оно отображало результаты из базы данных с помощью ListView.Таблица имеет три столбца: слово, описание и категория.На странице активности у меня есть список категорий, считываемых из массива.Я хочу настроить его так, чтобы, если вы щелкнете по элементу в списке (например, Cat1), результатом, возвращаемым курсором, будут все слова / описания с категорией Cat1 в БД.В настоящее время у меня просто появляется тост с именем этой категории при нажатии.

Как сейчас, действие не выполняется должным образом.Я читал в Интернете, и я не уверен, что делать дальше.Вот код, который у меня есть.Если кто-нибудь может мне помочь, я был бы очень признателен.

public class Categories extends ListActivity {DataBaseHelper db = new DataBaseHelper (this);личные данные базы данных SQLite;int position;

private ListView list;
private String[] categories = {
    "C1", "C2", "C3", "C4",
    "C5", "C6", "C7", "C8",
    "C9", "C10", "C11", "C12"
};

@Override
public void onCreate(Bundle icicle){
    super.onCreate(icicle);
    setContentView(R.layout.cat_list);

    list = (ListView)findViewById(R.id.cat_listing);
    list.setAdapter(new ArrayAdapter<String>(this,
        R.layout.categories, categories));
    list.setTextFilterEnabled(true);

    Cursor cursor = data.rawQuery("SELECT term, desc FROM words WHERE cat = '" + categories[position] + "'", null);
    startManagingCursor(cursor);

    String columns[] = new String[] { "term", "desc" };
    int[] to = new int[] { R.id.cat_term, R.id.cat_desc };

    SimpleCursorAdapter myAdapter = new SimpleCursorAdapter(this, R.layout.cat_result, cursor, columns, to);
    this.setListAdapter(myAdapter);

    list.setOnItemClickListener(new OnItemClickListener(){

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id){
            CharSequence text = categories[position];
            Toast toast = Toast.makeText(getApplicationContext(),
                    text, Toast.LENGTH_SHORT);
            toast.show();
        }
    });
}

}

Ответы [ 2 ]

4 голосов
/ 11 декабря 2010

У меня есть похожая функция в моем приложении.Вам нужно будет создать файл XML, чтобы определить макет для списка и вызвать их в своем коде Java.

Вот пример XML:

LIST:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical"  >
    <ListView 
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"   >
    </ListView>
    <TextView
        android:id="@+id/android:empty"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="@string/no_projects"
        android:padding="10dp"
        android:textSize="16sp"
        android:textStyle="bold"    >
    </TextView>
</LinearLayout>

Это пользовательский макет XML.Я называю это list_rows:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical"  >
    <TextView
        android:id="@+id/text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </TextView>
    <TextView
        android:id="@+id/text2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </TextView>
    <TextView
        android:id="@+id/text3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </TextView>
</LinearLayout>

И это код JAVA:

String[] fields = new String[]  {   db.TABLE_PRJ_NAME, db.TABLE_PRJ_TYPE, db.TABLE_PRJ_DESC };
    int[] views = new int[] {   /*android.R.id.text1*/ R.id.text1, R.id.text2, R.id.text3   };

    c = db.getAllProjects();
    startManagingCursor(c);

    // Set the ListView
    SimpleCursorAdapter prjName = new SimpleCursorAdapter(
            this,
            R.layout.project_list_rows,
            //android.R.layout.simple_list_item_1,
            c, fields, views);
    setListAdapter(prjName);

onListItemClickListener

// This section of code is for handling the Click Event of the Projects List
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    Cursor o = (Cursor) this.getListAdapter().getItem(position);
    String projectName = o.getString(1);

    Intent showProjectDetails = new Intent(this, ProjectDetails.class);
    Bundle bundle = new Bundle();

    bundle.putString("sendProjectName", projectName);

    showProjectDetails.putExtras(bundle);
    startActivity(showProjectDetails);
}

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

Спросите, нужны ли вам дополнительные объяснения.

0 голосов
/ 03 января 2012

Я делаю очень похожую программу.У меня проблемы с этим, так как это моя первая программа для Android / Java.Что мне помогло, так это от Интернета и моего отчима, который использует для обучения java.

Помогая мне настроить базу данных, он объяснил, как настроить мои таблицы так, чтобы категории соединялись с элементами под ним.Таким образом, у вас будет таблица для ваших категорий, включая название, которое вы будете отображать для этой категории, а также ваш первичный ключ.Затем вам нужен стол для следующего уровня вниз от категории, скажем, заголовок.Это будет включать текст для заголовка и первичного ключа.Затем вам нужно составить еще один стол, чтобы соединить их.Ключ заголовка, ключ категории и первичный ключ.

Оттуда вам нужно будет указать java для их сопряжения на основе этой последней таблицы.

Я нуб, так что извините, я не мог дать больше / лучше информации.Но все, что я найду по этому вопросу, я выложу здесь и удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...