2011-01-03 7 views
2

현재 두 개의 문자열이 포함 된 목록보기가 있습니다. 이들은 내가 뭘하려고했던 것은 내가 그런 내가 잠시 다시 customlistview했다 등의 주소 및 연락처 등의 분야를 표시 할 수 있도록 이들에 대한 하위 항목을 만드는 것입니다 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> 

에 문자열 배열에서 호출 하지만 난 어떻게 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/AAAAAAAAAZo/o10yCm3Efzc/s1600 /CustomListView2.1.PNG&imgrefurl=http://saigeethamn.blogspot.com/2010/04/custom-listview-android-developer.HTML 및 H = 512 w = 369 SZ = 20 tbnid = t6nZZXoRsk2nkM & TBNH = 131 tbnw = 94 이전 =/이미지 % 3Fq % 3Dcustom % 2Blistview 및 줌 = 1 및 Q = 맞춤 +리스트 뷰 및 HL = EN 및 USG = __ 6aDUd9NkxDfqztKZmrfhlnsn-Y4 = SA = X 및 EI = DSYiTaXeKY27hAeasty2Dg 및 SQI = 2 VED = 0CC8Q9QEwAg – Oli

+0

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

답변

7

편집 : 좋아, 차기, 나는 함께이를 던졌다. 그것은 컴파일하고 제대로 작동, 당신은 당신의 특정한 요구에 적응할 수 있는지 :

레이아웃/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_ _ __ _ __

당신은 아마 함께 공동 기록을 유지하기 위해, 이런 일에 대한 데이터베이스를 사용하여 더 나을 것입니다. (이를

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_array, taxi_address_array, taxi_phone_array) 다음 코드에서 택시 개체를 만들 컴파일되지 않은 코드이지만 약간의 개조가 필요할 수 있습니다.)하지만 다른 배열의 컴파일 된 정보가 모두 들어있는 택시 목록이 있습니다. 데이터베이스는 여전히 훨씬 더 나은 옵션입니다 (또는 자산의 데이터가 포함 된 CSV 파일조차도).

+0

메신저를 확인하십시오. 데이터베이스를 결국 데이터베이스로 이동하려고합니다. 문자열에서 가져 오기를 원했습니다. 내가 csv 파일로이 작업을 수행하는 방법은 무엇입니까? 더 쉬울까요? 감사합니다 – Oli

+0

Excel (또는 OO Calc)에서 전체 "데이터베이스"를 수행 할 수 있기 때문에 내 생각에 더 쉬울 것입니다. 기본적으로 스프레드 시트를 설정하고이를 CSV (쉼표로 구분 된 값)로 내 보냅니다. 물론 이것은 귀하의 콘텐츠에 쉼표가 포함되지 않는다고 가정합니다. 주소 필드가 있기 때문에 쉼표가 필요할 수 있습니다.이 경우 구분 기호로 파이프 (|)를 사용할 수 있습니다. Excel에서 구분 기호를 선택할 수 있다고는 생각하지 않지만 탭으로 구분 된 다음 탭을 파이프로 바꿀 수 있습니다. 그렇다면 ... – kcoppock

+0

당신은 자산 폴더에서 파일을 읽은 다음 수동으로 처리해야합니다 (파이프에 도달하거나 파이프를 버리고 다음 항목을 읽을 때까지 읽음). 따라서 아마,이 방법보다 쉽지는 않을 것이지만, 우연한 실수 (다른 순서의 다른 배열 또는 그와 유사한 것)가 적습니다. – kcoppock

0

당신은 중첩 된 목록의 어떤 종류를 찾고 계십니까?
는 ExpandableListView에서보세요 :
http://developer.android.com/reference/android/widget/ExpandableListView.html

http://mylifewithandroid.blogspot.com/2008/05/expandable-lists.html

+0

그 중 하나만 있습니다. 만약 내가 당신이 내가 더 의미하는 것을 보게 될 것입니다. 미안해, 내가 미안해. – Oli

+0

아, 알았어 - 여전히 문제가있는 경우 http://www.androidza.co.za/working-with-listview-part-1/ – jcuenod

3

나는 같은 문제가 있었고 다음과 같이 자신을 해결했습니다. 이 코드와 같은 하위 항목을 추가하기 만하면 코딩 할 필요가 없습니다!

<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> 
관련 문제