2013-02-16 2 views
1

Я пишу приложение, которое содержит несколько простых представлений; сначала это всего лишь две кнопки. каждая кнопка ведет к карте, и с этой карты появляется кнопка, которая открывает список зданий на сайте. Отсюда пользователь сможет выбрать здание и просмотреть подробную информацию о нем (как и список контактов на самом деле). До сих пор, я могу заполнить ListView, создавая массив строк для его заполнения его непосредственно в деятельности, например, так:Использование текстовых файлов и строк, определенных XML, для заполнения списков

public class BuildingsActivity extends ListActivity { 

static final String[] buildings=new String[]{ 
    "Building 1", 
    "Building 2", 
    "Building 3", 
    "Building 4", 
    "Building 5" 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_buildings); 
    // Show the Up button in the action bar. 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    setListAdapter(new ArrayAdapter<String>(this,   android.R.layout.simple_list_item_1,buildings)); 
} 

Это работает все хорошо для списка в 5 пункт, но это окончательная форма, список может содержать до ста зданий, и у меня есть 2 проблемы: 1) Столбец длиной в сто строк будет выглядеть действительно грубо определенным в коде, как это 2) Я беспокоюсь о том, как долго приложение должно открыть действие, если оно должно заранее создать такой большой список строковых значений.

Чтобы избежать этого, у меня возникла идея определить эту строку в массиве strings.xml и назначьте строки в макете списка в соответствующем формате XML для активности списка. Однако это пока не работает; нет ошибок, но команда android: entries не видит влияния на макет вообще. Это XML. Если кто-то знает о заполнении списка таким образом, я был бы признателен за ваши ответы.

<RelativeLayout 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=".BuildingsActivity" > 
    <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:entries="@array/buildings"> 
    </ListView> 

</RelativeLayout> 

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

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

+0

При использовании 'android: entries =" @ array/buildings "' вы меняете Адаптер для ListView в исходном коде? –

+0

Использование андроида: записи, у меня нет адаптера ... текст для каждого элемента списка определяется в макете, поэтому для заполнения списка не используется адаптер. У меня сейчас это работает, но я не могу понять, как обрабатывать выбор элемента без использования адаптера. –

ответ

0

Если вы хотите, чтобы заполнить ListView с из файла ресурса вы просто должны использовать это в вашем коде:

String[] values = getResources().getStringArray(R.array.<input_file>); 

После того как вы значения загружены вы просто должны присвоить его ArrayAdapter, как это :

adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values); 
setListAdapter(adapter); 

Второй параметр - это предопределенная компоновка SDK для Android, вы можете использовать свой собственный макет.

1

Java ArrayList реализует интерфейс Serializable, что позволяет сэкономить и загрузить массив в бинарный формат и из него с использованием функций writeObject и readObject. This page должно быть достаточно, чтобы вы начали.

0

Если ваш потолок String [] равен 100, я не вижу в этом проблемы просто генерировать массив и передавать его адаптеру. Что касается вашей озабоченности по поводу кода, выглядящего грубым, считаете ли вы, что вы храните эту информацию в базе данных и затем запрашиваете ее? Например, у вас может быть объект построения со всей его информацией и сохранение его в MySQL с помощью OrmLite. http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_1.html#SEC1 Затем вы могли бы написать геттер, чем возвращать представление массива, чтобы избежать уродливого кода.

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