2010-06-08 44 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()的地方,你应该把你的意图。

相关问题