0

각 행의 조각에서 Dictionary를 사용하여 목록보기를 채우고 사용자 정의 레이아웃을 사용할 수 있습니까? 행의 레이아웃에는 두 개의 텍스트 뷰와 한 개의 Imageview가 있습니다. 목록보기와사전 및 ListFragment가있는 Listview 채우기

내 레이아웃 :

<?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="match_parent"> 
<ListView 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="vertical" 
    android:background="#ff04aefa" /> 
</LinearLayout> 

레이아웃 행 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:src="@android:drawable/ic_menu_gallery" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView1" /> 

<LinearLayout 
    android:id="@+id/singleMessageContainer" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="5dip" 
     android:paddingLeft="10dip" 
     android:text="Texview 1" 
     android:textColor="@android:color/background_light" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="5dip" 
     android:paddingLeft="10dip" 
     android:textColor="@android:color/background_light" /> 
    </LinearLayout> 
</LinearLayout> 

내 ListFragment.cs :

Dictionary <string,string> _Dic = new Dictionary<string,string>(); 

    string[] _ValuesOfDic = { }; 

    public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     _Dic = MyProject.UtilDic.ReturnDic(); 

     _ValuesOfDic = new string[_Dic.Count]; 

     int cont = 0; 

     foreach (var item in _Dic) { 

      _ValuesOfDic[cont] = item.Value; 

      cont++; 
     } 

     View view = inflater.Inflate(Resource.Layout.LayoutListOfValues, null); //Layout with listView 

     ListView listview = (ListView)view.FindViewById (Android.Resource.Id.List); 

     listview.Adapter = new ArrayAdapter <string> (this.Activity, 
                 Android.Resource.Layout.SimpleListItem1, 
                 _ValuesOfDic); //Here I want to use the layout for the rows of listview 

     return view; 
    } 

    public override void OnListItemClick (ListView l, View v, int position, long id) 
    { 
     string value = l.Adapter.GetItem (position).ToString(); 
     string key = _Dic.FirstOrDefault (x => x.Value.Contains (value)).Key; 

     Console.WriteLine ("Value: " + value); 
     Console.WriteLine ("Key: " + key); 
    } 

답변

0

BaseAdapter에서 상속 및 취할 수있는 사용자 정의 Adapter를 만듭니다 귀하의 Dictionary 그리고 그에 따라 선물하십시오. ArrayAdapter은 목록 또는 배열 만 사용합니다.

그래서 같은 :

public class MyDictionaryAdapter : BaseAdapter 
{ 

    private Dictionary<TX,TY> _dict; 

    public MyDictionaryAdapter(Dictionary<TX, TY> dict) 
    { 
     _dict = dict; 
    } 

    public override View GetView (int position, View convertView, ViewGroup parent) 
    { 
     // populate your listview items here 
    } 
} 

는 현재의 ListView 및 어댑터에 대한 자세한 내용을보실 수 있습니다 : http://developer.xamarin.com/guides/android/user_interface/working_with_listviews_and_adapters/