blog

Android 開発チュートリアル XI: カスタムアダプタでリストを表示する

データバインディングの導入では、システムの使用が付属しています。 Android では、カスタムアダプタを使用することができます。次の図は、カスタムアダプタの使用方法を変更して、サンプルのアクティビテ...

Jan 3, 2022 · 6 min. read
シェア

データバインディングの導入では、SimpleAdapterを使用します。Androidでは、カスタムAdapterを使用することができ、理論的には、任意のViewを使用してデータを表示することができます。下図はAndroidGraphics2DTutorialを改造し、カスタムAdapterを使ってサンプルActivityのリストを表示したものです。

この例では、元のAndroidGraphics2DTutorialの名前をAndroidGraphics2DTutorial1に変更し、例のリストを表示するクラスAndroidGraphics2DTutorialを再作成します。3つのViewを使用して、リスト内のアイテム、アイコン、アクティビティ例の名前を表示するテキストボックス、および例に関する特定の情報を表示する別のテキストボックスを表示することを意図しています。reslayoutディレクトリに以下の内容のactivitylist.xmlを作成してください:

<string-array name=”activity_name”>        
  <item>Bezier</item>        
  <item>Brush</item>        
  <item>Colors</item>        
  <item>Font</item>  
  <item>Image</item> 
  <item>Path</item> 
  <item>Pen</item> 
  <item>Shape</item>  
  <item>Transform</item> 
 </string-array> 
  
 <string-array name=”activity_info”>        
  <item>Bezier</item>        
  <item>Pattern ,Gradients</item>        
  <item>Colors</item>        
  <item>FontDemo, FontTypes</item>  
  <item>DrawMap, JumbleImage, SeeThroughImage</item> 
  <item>Polys, Paths</item> 
  <item>Lines, Dashes, LineCap,LineJoin</item> 
  <item>Oval ,Pear ,Shape2DDemo</item>  
  <item>Transform</item> 
 </string-array> 

これらのリソースを定義したら、カスタムアダプタを使用してアプリケーションにリストを表示できます:

class ActivityInfo{ 
     int iconIndex; 
     String activityName; 
     String activityInfo; 
    }     
    class ActivityInfoAdapter extends ArrayAdapter<ActivityInfo>{     
     int resource; 
     public ActivityInfoAdapter(Context context, int resourceId, 
       List<ActivityInfo> objects) { 
      super(context, resourceId, objects); 
      resource=resourceId; 
     }     
     @Override 
     public View getView(int position,View ConvertView,ViewGroup parent){ 
      LinearLayout activityInfoView; 
      ActivityInfo activityInfo=getItem(position); 
      String activity_Name=activityInfo.activityName; 
      String activity_Info=activityInfo.activityInfo; 
      int iconIndex=activityInfo.iconIndex; 
      if(ConvertView==null){ 
       activityInfoView=new LinearLayout(getContext()); 
       String inflater=Context.LAYOUT_INFLATER_SERVICE; 
       LayoutInflater vi; 
   vi=(LayoutInflater)getContext().getSystemService(inflater); 
       vi.inflate(resource, activityInfoView,true); 
      }else{ 
       activityInfoView=(LinearLayout)ConvertView; 
      } 
      TextView activity_NameView 
    =(TextView)activityInfoView.findViewById(R.id.activityName); 
      TextView activity_InfoView 
     =(TextView)activityInfoView.findViewById(R.id.activityInfo); 
      ImageView iconView         =(ImageView)activityInfoView.findViewById(R.id.iconImage); 
      activity_NameView.setText(activity_Name); 
      activity_InfoView.setText(activity_Info); 
      iconView.setImageResource(iconIndex); 
      return activityInfoView;      
     } 
    }     
    public class AndroidGraphics2DTutorial extends ListActivity {     
     private ArrayList<ActivityInfo> activityInfos 
         =new ArrayList<ActivityInfo>(); 
     private ActivityInfoAdapter aa; 
     private final static String packgeName="com.pstreets.graphics2d";   
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      Resources res = getResources(); 
      String[] activity_Names = res.getStringArray(R.array.activity_name); 
      String[] activity_Infos = res.getStringArray(R.array.activity_info); 
      for(int i=0;i<activity_Names.length;i++){ 
       ActivityInfo activityInfo=new ActivityInfo(); 
       activityInfo.activityName=activity_Names[i]; 
       activityInfo.activityInfo=activity_Infos[i]; 
       activityInfo.iconIndex=R.drawable.icon1+i; 
       activityInfos.add(activityInfo); 
      }     
      aa=new ActivityInfoAdapter(this,R.layout.activitylist,activityInfos); 
      setListAdapter(aa); 
     }     
     @Override 
     protected void onListItemClick(ListView l, View v, int position, long id) { 
      ActivityInfo activityInfo = (ActivityInfo) l.getItemAtPosition(position); 
      Intent intent = new Intent(); 
      intent.setClassName(this, 
           packgeName+".example." +activityInfo.activityName); 
      startActivity(intent); 
     } 
    } 

この例ではリストボックスを使用していますが、 カスタムアダプタは Spinner や Gallery などのすべての AdapterView に適用されます。

Read next

IBM、NoSQLクラウドサービス・プロバイダーのCloudantを買収

IBMは、NoSQLクラウドデータベースサービスのプロバイダーであるCloudantを買収することで、クラウドサービスのポートフォリオをさらに強化します。

Dec 31, 2021 · 2 min read