2010-06-08 95 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()的地方,你應該把你的意圖。

相關問題