C#Xamarin片段无法启动

时间:2018-03-25 10:39:38

标签: c# visual-studio xamarin android-activity fragment

我正在努力解决问题!

我创建了一个片段来填充带有文本的页面,所以这里是完整的OnCreateView:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.Inflate(Resource.Layout.ProductInfo, container, false);

    List<products> SelectedCoinList = (from productname in coinList
                                       where productname.ProductName.Contains(SelectedProductName, StringComparison.OrdinalIgnoreCase)
                                       select productname).ToList<products>();

    ImageView ProductLogo = view.FindViewById<ImageView>(Resource.Id.ProductInfoLogo);

    var imageBitmap = GetImageBitmapFromUrl("http://******/thumbnails/" + SelectedProductList[position].Symbol + ".png");
    ProductLogo.SetImageBitmap(imageBitmap);

    TextView txtProductInfoName = view.FindViewById<TextView>(Resource.Id.txtProductInfoName);
    txtProductInfoName.Text = SelectedProductList[position].FullName;

    TextView txtProductInfoPrice = view.FindViewById<TextView>(Resource.Id.txtProductInfoPrice);
    txtProductInfoPrice.Text = "€ " + SelectedProductList[position].Price;

    return view;
}

在MainActivity.cs中我有这个代码(应该)启动片段:

public void ListViewProducts_ItemClick(object sender, AdapterView.ItemClickEventArgs e) {
    //Give variables the right value to share with other classes
    ProductName = productsList[e.Position].ProductNameName;
    position = e.Position;

    // Set view to Info 
    SetContentView(Resource.Layout.ProductInfo);
}

public string GetProductName() {
    return ProductName; //return your mainActivity list
}

问题是Fragment没有启动或者什么,因为它加载了ProductInfo页面,但是使用了默认文本。我通过在OnCreateView中放置断点来解决这个问题,但没有使用它们。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您需要创建片段的实例并将其插入Activity布局的视图中。例如,您可以使用FrameLayout。 在活动布局中添加框架布局

<FrameLayout
    android:id="@+id/fragmentContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

使用属性 android:visibility="gone"

如果您希望frameLayout不可见,并且在您的活动开始时不占用任何空间。

然后在你的活动中有一个像这样的方法

private YourFragment _fragment;
private void DisplayFragment()
{
    var fragmentContainer = FindViewById<FrameLayout> 
       (Resource.Id.fragmentContainer);
    _fragment= new YourFragment();
    var fragmentManager = FragmentManager.BeginTransaction();
    fragmentManager.Add(Resource.Id.fragmentContainer, _fragment);
    fragmentManager.Commit();
    fragmentContainer .Visibility = ViewStates.Visible; //Makes your fragment container visible if you set visibility=gone"

}