2010-06-08 8 views
6

확장 가능한 항목과 일부 단일 항목으로 목록을 작성하려고합니다. 단일 항목 또는 확장 가능 목록 하위 항목을 클릭 할 때 해당 항목의 텍스트를 기반으로 인 텐트를 호출 할 수 있도록하고 싶습니다.특정 항목 만 확장 가능한 목록을 만들려면 어떻게해야합니까?

확장 가능한 목록이 작동한다고 가정하지만 확장 가능한 목록 아이콘이없는 확장 가능한 목록에 항목을 설정하는 방법이 있습니까? 문자열 배열이 아닌 다른 것을 사용해야합니까?

가장 좋은 방법은 무엇입니까?

덕분에 내 불완전 코드, 나는 항목 "1 구역", "지역 2"를 삽입 할 것입니다, "지역 3"항목 "애틀랜타"와 "보스턴"간 또는 일부 아래

애틀란타의 :

package test.lists.special; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SpecialList extends ListActivity{ 
TextView toptext; 
String[] items={"Atlanta", "Boston", "Chicago", "Dallas"}; 

@Override 

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    setListAdapter(new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, 
    items)); 
    toptext=(TextView)findViewById(R.id.toptext); 
} 

public void onListItemClick(ListView parent, View v, int position, 
long id) { 
    Intent intent = new Intent(); 

    if (parent.getItemAtPosition(position)=="Atlanta") 
    { 
      //THIS IS WHERE I WISH TO INSERT "ZONE 1", "ZONE 2", "ZONE 3" 
        //between Atlanta and Boston in the list 
    } 
    else if (parent.getItemAtPosition(position)=="Boston") 
    { 
      intent.setClass(this, test.lists.special.Boston.class); 
      startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Chicago") 
    { 
      intent.setClass(this, test.lists.special.Chicago.class); 
       startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Dallas") 
    { 
      intent.setClass(this, test.lists.special.Dallas.class); 
      startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Zone 1") 
    { 
      intent.setClass(this, test.lists.special.Atlanta.Zone1.class); 
      startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Zone 2") 
    { 
      intent.setClass(this, test.lists.special.Atlanta.Zone2.class); 
      startActivity(intent); 
    } 
    else if (parent.getItemAtPosition(position)=="Zone 3") 
    { 
      intent.setClass(this, test.lists.special.Atlanta.Zone3.class); 
      startActivity(intent); 
    } 
    } 

} 

답변

0

내가 당신의 문제를 이해했다면, 항목의 유형에 따라 행에 다른 요소가있는 항목의 목록이 무엇입니까?

내가 추천하는 것은 BaseAdapter 클래스를 확장하고 자신 만의 행을 만드는 것입니다. 이 방법으로 현재 행이 유형에 따라 인쇄되는 방식을 제어하고 무엇이든 표시하거나 숨길 수 있습니다.

공식 Android 설명서에서 API Demos - ImageSwitcher 섹션에 예제가 있습니다. 아래

5

작업 및 테스트 코드 : "애틀랜타"원인에 대한

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SpecialList extends ListActivity{ 

    TextView toptext; 
    String[] items={"Atlanta", "Boston", "Chicago", "Dallas"}; 
    private CityListAdapter mListOfCities; 

    boolean mAtlantaListExpanded; 

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

     mAtlantaListExpanded = false; 
     mListOfCities = new CityListAdapter(); 
     setListAdapter(mListOfCities); 

     for (int n=0; n < items.length; n++) 
     { 
      mListOfCities.add(items[n]); 
     } 
    } 

    public void onListItemClick(ListView parent, View v, int position, long id) 
    { 
     Intent intent = new Intent(); 

     if (parent.getItemAtPosition(position)=="Atlanta") 
     { 
      mAtlantaListExpanded = !mAtlantaListExpanded; 
      mListOfCities.clear(); 
      for (int n=0; n < items.length; n++) 
      { 
       mListOfCities.add(items[n]); 
      }   
      Log.i("SpecialList", "Atlanta");    
     } 
     else if (parent.getItemAtPosition(position)=="Boston") 
     { 
      Log.i("SpecialList", "Boston"); 
     } 
     else if (parent.getItemAtPosition(position)=="Chicago") 
     { 
      Log.i("SpecialList", "Chicago"); 
     } 
     else if (parent.getItemAtPosition(position)=="Dallas") 
     { 
      Log.i("SpecialList", "Dallas"); 
     } 
    } 

    class CityListAdapter extends ArrayAdapter<String> {  

     CityListAdapter() {   
      super(SpecialList.this, R.layout.one_city_row); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View row = null; 
      LayoutInflater inflater = getLayoutInflater(); 

      if ((position == 0) && (!mAtlantaListExpanded)) 
      { 
       row = inflater.inflate(R.layout.expandable_city_row, parent, false); 
       TextView city = (TextView) row.findViewById(R.id.Expandable_TextView01); 
       city.setText(items[position]); 

       TextView cityZone1 = (TextView) row.findViewById(R.id.Zone_TextView01); 
       cityZone1.setText("Zone 1"); 

       TextView cityZone2 = (TextView) row.findViewById(R.id.Zone_TextView02); 
       cityZone2.setText("Zone 2"); 

       TextView cityZone3 = (TextView) row.findViewById(R.id.Zone_TextView03); 
       cityZone3.setText("Zone 3"); 

       cityZone1.setOnClickListener(
        new Button.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          Log.i("SpecialList", "Zone 1"); 
         } 
        } 
       ); 

       cityZone2.setOnClickListener(
        new Button.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          Log.i("SpecialList", "Zone 2"); 
         } 
        } 
       ); 

       cityZone3.setOnClickListener(
        new Button.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          Log.i("SpecialList", "Zone 3"); 
         } 
        } 
       );    
      } 
      else 
      { 
       row = inflater.inflate(R.layout.one_city_row, parent, false); 
       TextView city = (TextView) row.findViewById(R.id.City_TextView01); 
       city.setText(items[position]); 
      }     

      return(row); 
     } 
    } 
} 

클릭은 "애틀란타"를 보여 주거나 확장 된 목록 사이에 전환 목록의 묘화합니다. R.layout.one_city_row.xml은 TextView가 하나 인 단순한 레이아웃이므로 R.layout.Expandable_city_row.xml에는 첨부 된 코드 스 니펫에서 결론 지을 수있는 TextView 요소로 추가 하위 옵션이 있습니다.

이 방법을 사용하면 필요에 따라 목록을 완전히 사용자 지정할 수 있습니다. 내가 Log.i()을 넣은 곳에서, 당신은 당신의 의도를 넣어야합니다.