将布局添加到LinearLayout

时间:2019-06-06 19:12:35

标签: c# android xamarin.android

我有问题。我有一些CryptoCurrencies。它们存储在列表中,现在我想在屏幕上显示它们。我的想法是只为每个硬币添加一个LinearLayout到布局中。这是我的LiveCoinPrice.axml:

<?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="45dp"
    android:background="#edf0f4">
    <LinearLayout
        android:id="@+id/CoinPriceLayout"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="#edf0f4"
        android:orientation="vertical"
        android:paddingTop="2dp"
        android:gravity="center"
        android:layout_gravity="center">
        <TextView
            android:id="@+id/txtCoinName"
            android:textColor="#000000"
            android:layout_width="match_parent"
            android:text="CoinName"
            android:textColorHint="#ffffff"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/txtCoinPrice"
            android:textColor="#000000"
            android:layout_width="match_parent"
            android:text="CoinPrice"
            android:textColorHint="#ffffff"
            android:layout_height="wrap_content"
            android:gravity="center" />
    </LinearLayout>
</LinearLayout>

这是我尝试的代码:

InflatedCoinPriceLayout = LayoutInflater.Inflate(Resource.Layout.LiveCoinPrice, null);
CoinPriceLayout = InflatedCoinPriceLayout.FindViewById<LinearLayout>(Resource.Id.CoinPriceLayout);
LiveCoinName = InflatedCoinPriceLayout.FindViewById<TextView>(Resource.Id.txtCoinName);
LiveCoinPrice = InflatedCoinPriceLayout.FindViewById<TextView>(Resource.Id.txtCoinPrice);

然后在获取硬币的函数中执行以下操作:

int index = 0;
foreach (var coin in coinList)
{
    index += 1;
    LiveCoinName.Text = coin.Coin;
    LiveCoinPrice.Text = coin.Price.ToString();
    CoinPriceLayout.AddView(InflatedCoinPriceLayout, index);
}

但这在最后一行给了我这个错误:

  

java.lang.StackOverflowError:堆栈大小8MB

我在做什么错了?

PS:我只有3个硬币!

1 个答案:

答案 0 :(得分:0)

  

当Java应用程序调用函数调用时,将在调用堆栈上分配一个堆栈框架。堆栈框架包含调用的方法的参数,其本地参数以及方法的返回地址。返回地址表示执行点,从该执行点开始,在调用的方法返回后,程序将继续执行。如果没有足够的空间用于新的堆栈框架,则Java虚拟机(JVM)会引发StackOverflowError

我想您的代码实际上对于每个循环都像a一样工作,没有中断条件。 最简单的解决方案是仔细检查堆栈跟踪并检测行号的重复模式。这些行号表示要递归调用的代码。一旦检测到这些行,就必须仔细检查代码并了解为什么递归永远不会终止。