如何解决如何从代码 Xamarin 将 TextView 添加到 StackView?
我正在使用 Xamarin StackView,但是当我尝试向它添加一个孩子时,它给了我一个错误 代码: xml:
<StackView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/exchangesstack"
android:layout_column="0"
android:layout_row="4"/>
c#:
TextView txt = new TextView(BaseContext);
txt.Text = "TEST";
StackView stck = (StackView)FindViewById(Resource.Id.exchangesstack);
stck.AddView(txt);
错误:
java.lang.UnsupportedOperationException: 'addView(View) is not supported in AdapterView'
解决方法
StackView 是一种可以包含图像的视图,您可以以堆栈形式显示图像,也可以上下滚动图像。您可以在 Adapter 中创建一个新视图,而不是直接将 Textview 添加到 StackView。
型号:
public class StackItem
{
public string itemText { get; set; }
public int itemPhoto { get; set; }
public StackItem(string text,int photo)
{
this.itemPhoto = photo;
this.itemText = text;
}
}
适配器:
public class StackItemAdapter : BaseAdapter<StackItem>
{
private List<StackItem> sList;
private Context sContext;
public StackItemAdapter(Context context,List<StackItem> list)
{
this.sList = list;
this.sContext = context;
}
public override StackItem this[int position]
{
get
{
return sList[position];
}
}
public override int Count
{
get
{
return sList.Count;
}
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position,View convertView,ViewGroup parent)
{
View row = convertView;
if (row == null)
{
row = LayoutInflater.From(sContext).Inflate(Resource.Layout.layout1,null,false);
}
var m = sList[position];
if (m != null)
{
TextView text = row.FindViewById<TextView>(Resource.Id.textView1);
ImageView img = row.FindViewById<ImageView>(Resource.Id.imageView1);
text.Text = sList[position].itemText;
img.SetImageResource(sList[position].itemPhoto);
}
return row;
}
}
StackView 的主要布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<StackView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/exchangesStack"
android:layout_column="0"
android:layout_row="4"/>
</RelativeLayout>
您创建的新视图包含适配器的 TextView:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"/>
</FrameLayout >
主要活动:
public class MainActivity : AppCompatActivity
{
private StackView exchangesStack;
private List<StackItem> stackItems;
StackItemAdapter adapter;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this,savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
stackItems = new List<StackItem>();
stackItems.Add(new StackItem("dog",Resource.Drawable.dog));
stackItems.Add(new StackItem("pink",Resource.Drawable.pink));
stackItems.Add(new StackItem("walrus",Resource.Drawable.walrus));
stackItems.Add(new StackItem("lighthouse",Resource.Drawable.lighthouse));
stackItems.Add(new StackItem("coffee",Resource.Drawable.coffee));
exchangesStack = FindViewById<StackView>(Resource.Id.exchangesStack);
adapter = new StackItemAdapter(this,stackItems);
exchangesStack.Adapter = adapter;
exchangesStack.ItemClick += ExchangesStack_ItemClick;
}
private void ExchangesStack_ItemClick(object sender,AdapterView.ItemClickEventArgs e)
{
var select = stackItems[e.Position].itemText;
Android.Widget.Toast.MakeText(this,select,Android.Widget.ToastLength.Long).Show();
}
public override void OnRequestPermissionsResult(int requestCode,string[] permissions,[GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode,permissions,grantResults);
base.OnRequestPermissionsResult(requestCode,grantResults);
}
}
截图:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。