2017-03-06 71 views
0

我試圖用對話框片段中的自定義適配器創建一個listview。問題是Listview沒有顯示在片段中。如果我將視圖放入主要活動中,則會顯示列表+其項目。莫比有人知道什麼是錯我的代碼:Xamarin.Android的ListView在DialogFragment中沒有顯示

MainActivity class 

public class MainActivity : Activity 
{ 
    private List<string> serialNumbers = new List<string> { "test1", "test2" }; 
    private SerialDialog dialog = new SerialDialog(); 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.Main); 
     dialog.Show(FragmentManager, "SerialDialog"); 
    } 
} 

SerialDialog class 
class SerialDialog : DialogFragment 
{ 
    private View view = null; 
    private List<string> serialNumbers = new List<string> { "test" }; 
    private ListView listView; 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     base.OnCreateView(inflater, container, savedInstanceState); 
     view = inflater.Inflate(Resource.Layout.EnterSerial, container, false); 
     listView = view.FindViewById<ListView>(Resource.Id.SerialListView); 
     listView.Adapter = new CustomAdapter(Activity, serialNumbers); 

     return view; 
    } 

    public override void OnActivityCreated(Bundle savedInstanceState) 
    { 
     Dialog.Window.RequestFeature(WindowFeatures.NoTitle); 
     base.OnActivityCreated(savedInstanceState); 
    } 

} 

CustomAdapter類

public class CustomAdapter : BaseAdapter<string> 
{ 
    private List<string> items = new List<string>(); 
    private Activity context; 
    public override string this[int position] 
    { 
     get 
     { 
      return items[position]; 
     } 
    } 
    public override int Count 
    { 
     get 
     { 
      return items.Count(); 
     } 
    } 

    public CustomAdapter(Activity context, List<string> items) : base() 
    { 
     this.context = context; 
     this.items = items; 
    } 
    public void Add(string item) 
    { 
     items.Add(item); 
     NotifyDataSetChanged(); 
    } 

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

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     return null; 
    } 
} 

EnterSerial.axml

<?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="fill_parent" 
    android:minWidth="25px" 
    android:minHeight="25px" 
    android:background="@android:color/background_light"> 
    <ListView 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="200.5dp" 
     android:id="@+id/SerialListView" 
     android:layout_marginBottom="0.0dp" /> 
</LinearLayout> 

我用了一個BaseAdapter,因爲我需要在以後添加元素。 DialogFragment是空白的。調試顯示這些項目在列表中。

回答

1

DialogFragment爲空。調試顯示這些項目在列表中。

正如@apineda提到的,您的DialogFragment背景是白色的,你沒有在您的適配器實現GetView,但因爲你可以運行的代碼,我想你已經完成了這項工作只是沒有發表它。

測試與ListView項非常基本的佈局:

public override View GetView(int position, View convertView, ViewGroup parent) 
{ 
    View view = convertView; // re-use an existing view, if one is available 
    if (view == null) // otherwise create a new one 
     view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem1, null); 
    var tv = view.FindViewById<TextView>(Android.Resource.Id.Text1); 
    tv.Text = items[position]; 
    return view; 
} 

默認的文本的顏色也是白色的,所以該項目無法看到。您可以刪除EnterSerial.axml中的顏色android:background="@android:color/background_light"或將文本顏色添加到您的列表視圖項目以測試您的代碼。

也有很少數的問題與您的代碼,除了什麼apineda提到的,通常我們返回positionGetItemId

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

另外,我想你可能希望從你的MainActivity通過List<string>DialogFragment,然後例如,我們可以像這樣的代碼:

FragmentTransaction ft = FragmentManager.BeginTransaction(); 
ft.AddToBackStack(null); 
Bundle args = new Bundle(); 
args.PutStringArrayList("list", serialNumbers); 
dialog.Arguments = args; 
dialog.Show(ft, "TAG"); 

在對話框的OnCreate方法:

public override void OnCreate(Bundle savedInstanceState) 
{ 
    base.OnCreate(savedInstanceState); 
    var args = Arguments; 
    serialNumbers = args.GetStringArrayList("list").ToList(); 
} 
+0

謝謝,這解決了我的問題 –

0

我看到你發佈的代碼的幾個問題:

計數()不存在,因爲這不是列表

public override int Count 
{ 
    get 
    { 
     return items.Count(); 
    } 
} 

您還沒有實現您GetView方法的方法適配器。

public override View GetView(int position, View convertView, ViewGroup parent) 
{ 
    return null; 
} 

要解決你與列表中的空白移動適配器創建到OnViewCreated問題:

public override void OnViewCreated (View view, Bundle savedInstanceState) 
{ 
    base.OnViewCreated (view, savedInstanceState); 

    listView.Adapter = new CustomAdapter (Activity, serialNumbers); 
} 

還記得顏色設置爲將作爲要顯示你的數據的TextView DialogFragments上的默認文本顏色是白色的。