2016-04-18 4 views
1

この例では、セクションヘッダーでListViewを作成する方法を示します。これは、ステップセクションヘッダーxamarin androidでAndroid ListViewを作成するには?私は17のエラーがあります

あなたのリストのヘッダとリスト行 私は17個のエラーを持っていた

あなたの活動にListViewコントロール インスタンス化ListViewコントロールのためのカスタムアダプタを作成するために2つのカスタムレイアウトを作成し、以下が含まれます。私はセクションヘッダーxamarinアンドロイドでlistviewを作成したい。私はJavaからC#

あなたはこれらのような質問のためにXamarinのデベロッパーサイトの "検索" 機能を使用する必要があります

> - `public class CustomAdapter:BaseAdapter`->does not implement abstract member `android.widget.baseAdapter.getitem(int)` 
 
> - `Android.Widget.BaseAdapter.NotifyDataSetChanged()`-> An object reference is requered to access non-static member ..... 
 
> - `return mData.GetRange(position)`;-> no overload for method 'getrange'take 1 arguments 
 
> - `convertView = mInflater.Inflate(Resource.Layout.textViewHeaderItems, false)`;-> the 
 
> best overloaded method match for ..... has some invalid arguments 
 
> - `convertView.SetTag(holder);`-> no overload for method ... tkae 2 arguments 
 
> - `holder.textView.SetText(mData.get(position))`; type system.collection.generic.list<string> does not contain a defintion 
 
> for 'get'and no extension method 'get'of type 
 
> `system.Colleciton.Generic.List<string>` could be found. Are you 
 
> missing an assembly

public class CustomAdapter:BaseAdapter 
 
\t \t { 
 
\t \t \t private const int TYPE_ITEM = 0; 
 
\t \t \t private const int TYPE_SEPARATOR = 1; 
 

 
\t \t \t private List<String> mData = new List<String>(); 
 
\t \t \t private TreeSet sectionHeader = new TreeSet(); 
 

 
\t \t \t private LayoutInflater mInflater; 
 

 
\t \t \t public CustomAdapter(Context context) { 
 
\t \t \t \t mInflater = (LayoutInflater) context 
 
\t \t \t \t \t .GetSystemService(Context.LayoutInflaterService); 
 
\t \t \t } 
 

 
\t \t \t public void addItem(String item) { 
 
\t \t \t \t mData.Add(item); 
 
\t \t \t \t Android.Widget.BaseAdapter.NotifyDataSetChanged(); 
 
\t \t \t } 
 

 
\t \t \t public void addSectionHeaderItem(String item) { 
 
\t \t \t \t mData.Add(item); 
 
\t \t \t \t sectionHeader.Add(mData.Count - 1); 
 
\t \t \t \t Android.Widget.BaseAdapter.NotifyDataSetChanged(); 
 
\t \t \t } 
 

 
\t \t 
 
\t \t \t public int getItemViewType(int position) { 
 
\t \t \t \t return sectionHeader.Contains(position) ? TYPE_SEPARATOR : TYPE_ITEM; 
 
\t \t \t } 
 

 
\t 
 
\t \t \t public int getViewTypeCount() { 
 
\t \t \t \t return 2; 
 
\t \t \t } 
 

 
\t 
 
\t \t \t public int getCount() { 
 
\t \t \t \t return mData.Count; 
 
\t \t \t } 
 

 
\t \t 
 
\t \t \t public String getItem(int position) { 
 
\t \t \t \t return mData.GetRange(position); 
 
\t \t \t } 
 

 
\t \t 
 
\t \t \t public long getItemId(int position) { 
 
\t \t \t \t return position; 
 
\t \t \t } 
 

 
\t \t \t public View getView(int position, View convertView, ViewGroup parent) { 
 
\t \t \t \t ViewHolder holder = null; 
 
\t \t \t \t int rowType = getItemViewType(position); 
 

 
\t \t \t \t if (convertView == null) { 
 
\t \t \t \t \t holder = new ViewHolder(); 
 
\t \t \t \t \t switch (rowType) { 
 
\t \t \t \t \t case TYPE_ITEM: 
 
\t \t \t \t \t \t convertView = mInflater.Inflate(Resource.Layout.textViewHeaderItems, false); 
 
\t \t \t \t \t \t holder.textView = (TextView) convertView.FindViewById(Resource.Id.textviewHeaderItems); 
 
\t \t \t \t \t \t break; 
 
\t \t \t \t \t case TYPE_SEPARATOR: 
 
\t \t \t \t \t \t convertView = mInflater.Inflate(Resource.Layout.textViewItemsSeparator, false); 
 
\t \t \t \t \t \t holder.textView = (TextView) convertView.FindViewById(Resource.Id.textviewItemsSeparator); 
 
\t \t \t \t \t \t break; 
 
\t \t \t \t \t } 
 
\t \t \t \t \t convertView.SetTag(holder); 
 
\t \t \t \t } else { 
 
\t \t \t \t \t holder = (ViewHolder) convertView.GetTag(); 
 
\t \t \t \t } 
 
\t \t \t \t holder.textView.SetText(mData.get(position)); 
 

 
\t \t \t \t return convertView; 
 
\t \t \t } 
 

 
\t \t \t public class ViewHolder { 
 
\t \t \t \t public TextView textView; 
 
\t \t \t } 
 
\t \t }

答えて

1

に変換 http://javatechig.com/android/listview-with-section-header-in-android

注:GoogleやBingのまたこれらのような質問のためのあなたの親友です。

Android.Content.Context.LayoutInflaterService

この文脈でレイアウトリソースを膨張させるためLayoutInflaterを取得するContext.GetSystemService(String)で使用。

https://developer.xamarin.com/api/field/Android.Content.Context.LayoutInflaterService/

Android.Widget.BaseAdapter.NotifyDataSetChanged

基礎となるデータが変更されたデータ・セットを反映する任意のビューがそれ自体を更新する必要があることを取り付けた観察者に通知します。

Java.Util.TreeSet

TreeSetのhttps://developer.xamarin.com/api/member/Android.Widget.BaseAdapter.NotifyDataSetChanged/

はたSortedSetの実装です。

https://developer.xamarin.com/api/type/Java.Util.TreeSet/

+0

私たち「検索」結果を表示することができますが、多くの情報があります。私は分かりません –

+0

treesetを使用することはできません<> –

+0

私のポストを更新しました。どうぞ宜しくお願い致します –

0

私はまたthis blog postに基づいてセクションヘッダとListViewを作成することになった問題に遭遇しました。ここで私はケースの誰にそれをやった方法は、同じ問題に遭遇しています:

adapter_expandable_listview_header:

は、ヘッダとListViewの内側に取​​り込まれるリスト項目のレイアウトを定義します。XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:id="@+id/adapter_expandable_listview_header_textview" 
     android:layout_width="match_parent" 
     android:text="Header" 
     android:textStyle="bold" 
     android:textSize="14sp" 
     android:textColor="@color/textColorSecondary" 
     android:layout_height="wrap_content" 
     android:layout_margin="16dp" /> 
</LinearLayout> 

adapter_expandable_listview_listitem.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minWidth="25px" 
    android:minHeight="25px"> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/relativeLayout1" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:layout_marginTop="16dp" 
     android:layout_marginBottom="20dp" 
     android:descendantFocusability="blocksDescendants"> 
     <TextView 
      android:text="Rüttenscheider Stern" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/adapter_expandable_listview_listitem_textview1" 
      android:textSize="16sp" 
      android:textColor="@color/textColorPrimary" /> 
     <TextView 
      android:text="Essen" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/adapter_expandable_listview_listitem_textview1" 
      android:id="@+id/adapter_expandable_listview_listitem_textview2" 
      android:textSize="14sp" /> 
     <TextView 
      android:text="Rüttenscheiderstraße" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/adapter_expandable_listview_listitem_textview2" 
      android:id="@+id/adapter_expandable_listview_listitem_textview3" 
      android:textSize="14sp" /> 
     <ImageButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:id="@+id/adapter_expandable_listview_listitem_overflow_button" 
      android:src="@drawable/ic_dots_vertical_grey600_18dp" 
      android:background="@null" /> 
    </RelativeLayout> 
    <View 
     android:layout_width="match_parent" 
     android:layout_marginLeft="16dp" 
     android:layout_height="1dp" 
     android:background="@color/material_grey_300" /> 
</LinearLayout> 

そして、ここではListViewためのアダプタです:

SectionedHeaderListViewAdaper.cs

namespace YourNamespace 
{ 
    /// <summary> 
    /// Used to pass groups of objects to the adapter. 
    /// </summary> 
    internal class ExpandableItem 
    { 
     public string HeaderTitle; 
     public List<FMNavigationListItem> ChildItems; 
    } 

    /// <summary> 
    /// Used internally by the adapter. 
    /// </summary> 
    internal class SectionedHeaderListItem 
    { 
     public string HeaderTitle; 
     public FMNavigationListItem Item; 

     public SectionedHeaderListItem(string headerTitle, FMNavigationListItem item) 
     { 
      HeaderTitle = headerTitle; 
      Item = item; 
     } 
    } 

    /// <summary> 
    /// 
    /// </summary> 
    class SectionedHeaderListViewAdaper : BaseAdapter 
    { 
     const int TypeItem = 0; 
     const int TypeSeperator = 1; 

     LayoutInflater mLayoutInflater; 
     List<SectionedHeaderListItem> mDataItems; 
     List<int> mSectionPositions; 

     /// <summary> 
     /// 
     /// </summary> 
     /// <param name="context"></param> 
     /// <param name="items"></param> 
     public SectionedHeaderListViewAdaper(Context context, List<ExpandableItem> items) 
     { 
      mLayoutInflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService); 
      mSectionPositions = new List<int>(); 

      // Sort each item via header title. 
      List<ExpandableItem> dataItems = items; 
      dataItems.Sort(delegate (ExpandableItem e1, ExpandableItem e2) 
      { 
       return e1.HeaderTitle.CompareTo(e2.HeaderTitle); 
      }); 

      // Sort each child item alphabetically. 
      foreach (var d in dataItems) 
      { 
       d.ChildItems.Sort(delegate (FMNavigationListItem i1, FMNavigationListItem i2) 
       { 
        return i1.DisplayAttributes[0].CompareTo(i2.DisplayAttributes[0]); 
       }); 
      } 

      // Merge all items into one big list. 
      mDataItems = new List<SectionedHeaderListItem>(); 
      int index = 0; 
      foreach (var expandableItem in dataItems) 
      { 
       // Represents a section 
       mDataItems.Add(new SectionedHeaderListItem(
        expandableItem.HeaderTitle, 
        null)); 
       mSectionPositions.Add(index); 
       index++; 

       // Now add the child items for the section 
       foreach (var dataItem in expandableItem.ChildItems) 
       { 
        mDataItems.Add(new SectionedHeaderListItem(
         expandableItem.HeaderTitle, 
         dataItem)); 
        index++; 
       } 
      } 
     } 

     public override Java.Lang.Object GetItem(int position) 
     { 
      return position; 
     } 

     public override long GetItemId(int position) 
     { 
      return position; 
     } 

     public FMNavigationListItem ItemAt(int position) 
     { 
      return mDataItems[position].Item; 
     } 

     /// <summary> 
     /// One view for the header and another for 
     /// the normal cells. 
     /// </summary> 
     public override int ViewTypeCount 
     { 
      get 
      { 
       return 2; 
      } 
     } 

     public override int GetItemViewType(int position) 
     { 
      if (mSectionPositions.Contains(position)) 
       return TypeSeperator; 
      return TypeItem; 
     } 

     public override int Count 
     { 
      get 
      { 
       return mDataItems.Count; 
      } 
     } 

     public override View GetView(int position, View convertView, ViewGroup parent) 
     { 
      SectionedHeaderListViewAdaperViewHolder holder = null; 
      int rowType = GetItemViewType(position); 

      // Inflate the correct layout 
      if (convertView == null) 
      { 
       holder = new SectionedHeaderListViewAdaperViewHolder(); 
       switch(rowType) 
       { 
        case TypeItem: 
         convertView = mLayoutInflater.Inflate(
          Resource.Layout.adapter_expandable_listview_listitem, 
          null); 
         break; 
        case TypeSeperator: 
         convertView = mLayoutInflater.Inflate(
          Resource.Layout.adapter_expandable_listview_header, 
          null); 
         break; 
       } 
       convertView.Tag = (SectionedHeaderListViewAdaperViewHolder)convertView.Tag; 
      } 
      else 
      { 
       holder = (SectionedHeaderListViewAdaperViewHolder)convertView.Tag; 
      } 

      //Populate UI components 
      SectionedHeaderListItem item = mDataItems[position]; 
      switch (rowType) 
      { 
       case TypeItem: 
        // Horrible code incomming 
        holder.DispAttsTextViews = new List<TextView>(); 
        holder.DispAttsTextViews.Add(convertView.FindViewById<TextView>(Resource.Id.adapter_expandable_listview_listitem_textview1)); 
        holder.DispAttsTextViews.Add(convertView.FindViewById<TextView>(Resource.Id.adapter_expandable_listview_listitem_textview2)); 
        holder.DispAttsTextViews.Add(convertView.FindViewById<TextView>(Resource.Id.adapter_expandable_listview_listitem_textview3)); 
        holder.DispAttsTextViews[0].Text = item.Item.DisplayAttributes[0]; 
        holder.DispAttsTextViews[1].Text = item.Item.DisplayAttributes[1]; 
        holder.DispAttsTextViews[2].Text = item.Item.DisplayAttributes[2]; 
        break; 
       case TypeSeperator: 
        holder.HeaderTextView = convertView.FindViewById<TextView>(Resource.Id.adapter_expandable_listview_header_textview); 
        holder.HeaderTextView.Text = item.HeaderTitle; 
        break; 
      } 
      return convertView; 
     } 
    } 

    class SectionedHeaderListViewAdaperViewHolder : Java.Lang.Object 
    { 
     public TextView HeaderTextView { get; set; } 
     public List<TextView> DispAttsTextViews { get; set; } 
    } 

FMNavigationListItemオブジェクトは、データ項目として内部的に使用しているので、変更することができます。その背後にある考え方は、データをそれぞれヘッダタイトルを持つExpandableItemオブジェクトにグループ化することです。アダプターはこれらのオブジェクトを1つの大きなリストにまとめます。

あなたはhere

関連する問題