Как реализовать заполненный базой данных ListView для другого созданного XML ListView? - PullRequest
0 голосов
/ 27 февраля 2012

Я создал базу данных с данными, которые я поместил в ListView. Так как он был создан программно, не существует xml-файла, содержащего это ListView. Код:

public class hornot extends Application{

  public static final String KEY_ROWID = "_id";
  public static final String KEY_NAME = "persons_name";
  public static final String KEY_HOTNESS = "persons_hotness";
  public static final String DATABASE_NAME = "HotOrNotdb";
  private static final String DATABASE_TABLE = "peopleTable";
  private static final int DATABASE_VERSION = 1;

  private DbHelper ourHelper;
  private final Context ourContext;
  private SQLiteDatabase ourDatabase;

  private static class DbHelper extends SQLiteOpenHelper {
  public DbHelper(Context context) {
  super (context, DATABASE_NAME, null, DATABASE_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
  db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
   KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
   KEY_NAME + " TEXT NOT NULL, " +
   KEY_HOTNESS + " TEXT NOT NULL);"
   );

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

   }
 public hornot(Context c) {
  ourContext = c;
  }

 public hornot open() throws SQLException{ //ez a throws kell az SQLiteExample.java try részhez
  ourHelper = new DbHelper(ourContext);
  ourDatabase = ourHelper.getWritableDatabase();
  return this;
  }

Вот как я помещаю предметы в ListView:

 ListView lv;
  ArrayList<String> todoItems = new ArrayList<String>();
 ArrayList<String> todoItems2 = new ArrayList<String>();

  @Override
  protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, todoItems));

   final ListView lv = getListView();
   lv.setTextFilterEnabled(true);
  final hornot info = new hornot(this);
  info.open();

  Cursor c = info.getAllTitles();
  if (c.moveToFirst())
        {
        do{
                 todoItems.add(c.getString(0) + " " + c.getString(1) + " " + c.getString(2));
         }while (c.moveToNext());
       }
            if (todoItems.size() > 0)
            {
        lv.setAdapter(new ArrayAdapter<String>(sqview.this,android.R.layout.simple_list_item_1, todoItems));
            }

Я создал XML и хочу поместить программно созданный ListView в другой ListView (с идентификатором listplus):

<?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="fill_parent">
  <Button android:text="Button" android:id="@+id/b1"
  android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
  <Button android:text="Button" android:id="@+id/b2"
  android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
  <ListView android:id="@+id/listplus" android:layout_height="wrap_content"
  android:layout_width="fill_parent"><;/ListView>
</LinearLayout>

Как я мог это сделать?

1 Ответ

2 голосов
/ 27 февраля 2012

Я думаю, что вы просто хотите ListActivity с пользовательским макетом.Прямо сейчас вы используете ListActivity (который по умолчанию показывает только полноэкранный список), если вы хотите, чтобы другие элементы, помимо списка (кнопки, изображения и т. Д.), Устанавливали вид содержимого в макет xml.Если вы устанавливаете представление контента в пользовательский макет, в этом макете вы должны иметь ListView с идентификатором "@android:id/list", чтобы ваш ListView знал, где следует связать данные.Поэтому, если вы хотите использовать размещенный вами макет, измените его и добавьте в список требуемый id:

<?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="fill_parent">
  <Button android:text="Button" android:id="@+id/b1"
  android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
  <Button android:text="Button" android:id="@+id/b2"
  android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
  <ListView android:id="@android:id/list" android:layout_height="wrap_content"
  android:layout_width="fill_parent"></ListView>
</LinearLayout>

Затем в используемом вами текущем ListActivity просто добавьте строку:

@Override
  protected void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.the_name_of_above_layout); // <=this line
     setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, todoItems));

     final ListView lv = getListView();
     lv.setTextFilterEnabled(true);
     final hornot info = new hornot(this);
     info.open();

     Cursor c = info.getAllTitles();
     if (c.moveToFirst()) {
        do {
            todoItems.add(c.getString(0) + " " + c.getString(1) + " " + c.getString(2));
        } while (c.moveToNext());
     }
     if (todoItems.size() > 0) {
        lv.setAdapter(new ArrayAdapter<String> (sqview.this,android.R.layout.simple_list_item_1, todoItems));
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...