[从处理程序中有一个类继承者,我可以通过它控制图形按钮。为了搜索该按钮,我向设计者传递了一个指向激活的链接。但我想在那里传递观点。如何从活动中获取视图?
public class FlActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_fl);
toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
tabLayout = FindViewById<TabLayout>(Resource.Id.tabLayout);
viewPager = FindViewById<ViewPager>(Resource.Id.viewPager);
fpAdapter = new FpAdapter(SupportFragmentManager, null);
uiHandler = new UiHandler(this, MainLooper);
}
}
public class UiHandler : Handler
{
private Activity activity { get; }
public UiHandler(Activity a, Looper loader) : base(loader)
{
activity = a;
}
public override void HandleMessage(Message msg)
{
activity.FindViewById<ImageButton>(Resource.Id.imageButton1).SetImageResource(msg.Data.GetInt("ID", Resource.Drawable.bt_off));
}
}
如果将private Activity activity { get; }
更改为private View view { get; }
,那么在创建处理程序实例时如何从主要活动转移视图。创建nadler对象时用什么替换this
?
有很多方法可以做到这一点:
this.Window.DecorView.RootView;
或
this.Window.DecorView.FindViewById(Android.Resource.Id.Content);
或
this.FindViewById(Android.Resource.Id.Content);
或
this.FindViewById(Android.Resource.Id.Content).RootView;
或
((ViewGroup) this.FindViewById(Android.Resource.Id.Content)).GetChildAt(0);
尽管,由于它可能是布局,而不是单个视图,所以我建议使用ViewGroup
而不是View
(这些方法返回View
,因此如果需要,您必须将它们转换为ViewGroup
)
=================
贷给this答案