2011-01-03 5 views
2

В настоящее время у меня есть listview, который содержит пару строк. Они вызываются из массива строк в strings.xmlДобавление подменю в список в Android

<string name="app_name">Taxi Me</string> 
<string-array name="taxi_array"> 
    <item>Barrys Taxi</item> 
    <item>Boom Taxi</item> 

</string-array> 

То, что я пытаюсь сделать, это создать подразделы для них, так что я могу показать поля, такие как адрес и контактные данные и т.д. Я сделал customlistview некоторое время назад но не могу понять, как я могу это сделать, используя файл strings.xml? Есть ли какие-то определенные теги, которые мне нужно использовать, чтобы они отображались в виде списка?

Основная деятельность Код:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    final String[] taxi = getResources().getStringArray(R.array.taxi_array); 
    final String[] address = getResources().getStringArray(R.array.taxi_add); 

    setListAdapter(new ArrayAdapter<String>(this, R.layout.listtaxi, taxi)); 

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

    for (int i = 0; i < taxi.length; i++) { 
     lv.add(new ListTaxi (taxi[i], address[i])); 
    } 

/*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_LONG).show(); 
     } 
    }); 
    */ 
     lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> a, View v, final int position, long id) 
     { 
      final int selectedPosition = position; 
      AlertDialog.Builder adb=new AlertDialog.Builder(ListTaxi.this); 
      adb.setTitle("Taxi Booking"); 
      adb.setMessage("You Have Selected: "+lv.getItemAtPosition(position)); 
      adb.setPositiveButton("Book", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        Intent intent = new Intent(getApplicationContext(), Booking.class); 
        intent.putExtra("booking", taxi[selectedPosition]); 
        startActivity(intent); 
       } 
      }); 
      adb.setNegativeButton("Cancel", null); 
      adb.show(); 
     } 
    }); 
+0

Я не понимаю, что вы пытаетесь сделать. Можете ли вы объяснить ожидаемый результат? – Macarse

+0

Ниже приведен пример того, что я пытаюсь достичь http://www.google.co.uk/imgres?imgurl=http://4.bp.blogspot.com/_I2Ctfz7eew4/S82CgLXsgqI/AAAAAAAAAZ//101Cm3Efzc/s1600 /CustomListView2.1.PNG&imgrefurl=http://saigeethamn.blogspot.com/2010/04/custom-listview-android-developer.HTML & ч = 512 & W = 369 & SZ = 20 & tbnid = t6nZZXoRsk2nkM: & tbnh = 131 & tbnw = 94 & пред =/изображений% 3Fq% 3Dcustom% 2Blistview & масштаб = 1 & д = пользовательские + ListView & гл = еп & USG = __ 6aDUd9NkxDfqztKZmrfhlnsn-y4 = & са = Х & е = DSYiTaXeKY27hAeasty2Dg & SQI = 2 & вед = 0CC8Q9QEwAg – Oli

+0

см HTTP: //stackoverflow.com/questions/7916834/android-adding-listview-sub-item-text – mjn

ответ

7

EDIT: Хорошо, только для пинков, я бросил это вместе. Он собирает и работает правильно, если вы можете адаптировать его для ваших конкретных потребностей:

макет/taxi_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="100dp" 
    android:padding="10dp" 
    android:orientation="vertical" 
    > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/taxi_name" 
     /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/taxi_address" 
     /> 
</LinearLayout> 

макет/main.xml

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

TaxiMain.java

package com.test.taxi; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.ListActivity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class TaxiMain extends ListActivity { 
    /** Called when the activity is first created. 
    * @return */ 

    class Taxi { 
     private String taxiName; 
     private String taxiAddress; 

     public String getName() { 
      return taxiName; 
     } 

     public void setName(String name) { 
      taxiName = name; 
     } 

     public String getAddress() { 
      return taxiAddress; 
     } 

     public void setAddress(String address) { 
      taxiAddress = address; 
     } 

     public Taxi(String name, String address) { 
      taxiName = name; 
      taxiAddress = address; 
     } 
    } 

    public class TaxiAdapter extends ArrayAdapter<Taxi> { 
     private ArrayList<Taxi> items; 
     private TaxiViewHolder taxiHolder; 

     private class TaxiViewHolder { 
      TextView name; 
      TextView address; 
     } 

     public TaxiAdapter(Context context, int tvResId, ArrayList<Taxi> items) { 
      super(context, tvResId, items); 
      this.items = items; 
     } 

     @Override 
     public View getView(int pos, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 
       LayoutInflater vi = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.feed_view, null); 
       taxiHolder = new TaxiViewHolder(); 
       taxiHolder.name = (TextView)v.findViewById(R.id.taxi_name); 
       taxiHolder.address = (TextView)v.findViewById(R.id.taxi_address); 
       v.setTag(taxiHolder); 
      } else taxiHolder = (TaxiViewHolder)v.getTag(); 

      Taxi taxi = items.get(pos); 

      if (taxi != null) { 
       taxiHolder.name.setText(taxi.getName()); 
       taxiHolder.address.setText(taxi.getAddress()); 
      } 

      return v; 
     } 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     String[] taxiNames = getResources().getStringArray(R.array.taxi_name_array); 
     String[] taxiAddresses = getResources().getStringArray(R.array.taxi_address_array); 

     ArrayList<Taxi> taxiList = new ArrayList<Taxi>(); 

     for (int i = 0; i < taxiNames.length; i++) { 
      taxiList.add(new Taxi(taxiNames[i], taxiAddresses[i])); 
     } 

     setListAdapter(new TaxiAdapter(this, R.layout.taxi_list_item, taxiList));  
    } 
} 

_ __ _ _END EDIT_ _ __ _ __

Вы, вероятно, будет лучше использовать базу данных что-то вроде этого, чтобы сохранить записи, привязанные вместе. Если вы установите на использовании массивов, одна вещь, которую вы могли бы сделать, это отдельный массив для каждого элемента, который нужно (например, taxi_array, taxi_address_array, taxi_phone_array), а затем сделать объект такси в вашем коде:

class Taxi { 
    String taxiName; 
    String taxiAddress; 
    String taxiPhone; 

    public Taxi(String name, String address, String phone) { 
     taxiName = name; 
     taxiAddress = address; 
     taxiPhone = phone; 
    } 
} 

private List<Taxi> taxiList; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    String[] taxiNames = getResources().getStringArray("taxi_array"); 
    String[] taxiAddresses = getResources().getStringArray("taxi_address_array"); 
    String[] taxiPhones = getResources().getStringArray("taxi_phone_array"); 
    taxiList = new ArrayList<Taxi>(); 

    for (int i = 0; i < taxiNames.length; i++) { 
     taxiList.add(new Taxi(taxiNames[i], taxiAddresses[i], taxiPhones[i])); 
    } 
} 

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

+0

im, чтобы в конечном итоге переместить его на db, но atm just хотел, чтобы оттянуть его от струн. как бы я сделал это с помощью csv-файла? это проще? Спасибо – Oli

+0

Было бы проще, на мой взгляд, потому что вы могли бы сделать всю «базу данных» в Excel (или OO Calc). В основном вы просто настраиваете электронную таблицу и экспортируете ее в CSV (значения, разделенные запятыми). Конечно, это предполагает, что ваш контент не будет содержать никаких запятых. Поскольку у вас есть поле адреса, вам, вероятно, понадобятся запятые, и в этом случае вы можете использовать что-то вроде канала (|) для разделителя. Я не думаю, что Excel позволяет вам выбирать разделитель, но ... но вы всегда можете использовать разделитель табуляции, а затем выполнять поиск> заменить вкладки на трубы. Затем ... – kcoppock

+0

вам просто нужно прочитать в файле папку с вашими ресурсами, а затем обработать ее вручную (читать до тех пор, пока вы не достигнете трубы, не отбросьте трубку, не прочитайте следующий элемент и т. Д.). Таким образом, нет, возможно, не EASIER, чем этот метод, ха-ха, но менее подвержен случайной ошибке (разные массивы в разных порядках или что-то в этом роде). – kcoppock

0

Вы ищете какой-то вложенных списков?
Посмотрите ExpandableListView:
http://developer.android.com/reference/android/widget/ExpandableListView.html
и
http://mylifewithandroid.blogspot.com/2008/05/expandable-lists.html

+0

Нет ни одного из них. если вы посмотрите на ссылку, которую я разместил в комментарии дальше, вы увидите, что я имел в виду. извините, если я не был чист. – Oli

+0

Ahh, ладно - если у вас все еще есть проблемы, ознакомьтесь с http://www.androidza.co.za/working-with-listview-part-1/ – jcuenod

3

У меня была такая же проблема, и я решил сам вот так: вы можете просто добавить subitem, как этот код, и вам не нужно столько кодирования!

<string name="app_name">Taxi Me</string> 
    <string-array name="taxi_array"> 
<item> 
    <item>Barrys Taxi</item> 
    <item>adress</item> 
    <item>contact</item> 
    <item>ANY THING...</item> 
</item> 

<item> 
    <item>Boom Taxi</item> 
    <item>adress</item> 
    <item>contact</item> 
    <item>ANY THING...</item> 
</item> 
    </string-array> 
Смежные вопросы