скопировать конкретный элемент из одного массива в другой - PullRequest
0 голосов
/ 24 июня 2011

Я новичок в Android Progmmaing, и я хочу задать простой вопрос

Мне удалось проанализировать RSS-канал и сохранить конкретные элементы (такие как название, публикация, ссылка, медиа и описание) вбаза данных.затем я использовал arraylist для извлечения данных из базы данных.код для этого

  public static  ArrayList<Item> GetItems(AndroidDB androiddb) {
   SQLiteDatabase DB = androiddb.getReadableDatabase();
    ArrayList<Item> result = new ArrayList<Item>();
    try {    
    Cursor c = DB.rawQuery("select * from ITEMS_TABLE", null);
    if (c.getCount() > 0) {
        c.moveToFirst();
        do {
            result.add(new Item(
                    c.getString(0),
                    c.getString(1),
                    c.getString(2),
                    c.getString(3),
                    c.getString(4)));
        } while (c.moveToNext());

    } 
  c.close();
  DB.close();
} catch (SQLException e){
    Log.e("DATABASE", "Parsing Error", e);

}
return result;

}

, где 0 первый столбец базы данных, который содержит элемент заголовка

, теперь я хочу создать просмотр списка только сэлемент title, поэтому я создал ArrayList в своем методе onCreate, и мой вопрос заключается в том, как скопировать из предыдущего ArrayList только те элементы, которые ссылаются на элемент Title.Я написал эту часть кода.Что я должен написать в цикле, чтобы скопировать определенный элемент?

      ArrayList<String> first_item = new ArrayList<String>();
                 items=AndroidDB.GetItems(rssHandler.androiddb);
                 int numRows=items.size();
                    for(int i=0; i < numRows; ++i)  {

                first_item.add());
                            }

        setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, first_item));

                  ListView lv = getListView();
                  lv.setTextFilterEnabled(true);

                  lv.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                      // When clicked, show a toast with the TextView text
                      Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
                          Toast.LENGTH_SHORT).show();
                    }
                  });
                } 

        catch (Exception e) {
            tv.setText("Error: " + e.getMessage());
            Log.e(MY_DEBUG_TAG, "Parsing Error", e);
            } 
        this.setContentView(tv);
    }

заранее спасибо

1 Ответ

0 голосов
/ 24 июня 2011

пара быстрых комментариев - во-первых,

if (c.getCount() > 0) {
    c.moveToFirst();
    do {
        result.add(new Item(
                c.getString(0),
                c.getString(1),
                c.getString(2),
                c.getString(3),
                c.getString(4)));
    } while (c.moveToNext());
}

можно смело заменить на простой:

while (c.moveToNext()) {
    ....
}

Нет особой причины проверять размер таким способом, и вам не нужно вызывать moveToFirst () для курсора. Это всего лишь предложение по удобству сопровождения, и оно не отвечает на ваш вопрос, но я хотел бы добавить его, чтобы сэкономить ваши нажатия клавиш в будущем.

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

List<CompoundObjectWithAStringProperty> foo = /* go get the list */
List<String> allProperties = new ArrayList<String>();

for (CompoundObjectWithAStringProperty obj : foo) {
    allProperties.add(obj.getStringProperty());
}

Ваш код находится на 90% пути, но он такой C-подобный.

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