如何从主 Activity 获取视图

Posted

技术标签:

【中文标题】如何从主 Activity 获取视图【英文标题】:How to get view from main Activity 【发布时间】:2020-05-11 00:25:03 【问题描述】:

处理程序有一个类继承器,我通过它控制图形按钮。 为了搜索这个按钮,我在设计器中传递了一个激活链接。但我想通过那里的观点。如何从活动中获取视图?

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

【问题讨论】:

【参考方案1】:

有很多方法可以做到这一点:

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的回答

【讨论】:

感谢它的帮助。我需要一个视图,因为我想改变这个类中其他视图的处理程序元素,例如,一个对话框。

以上是关于如何从主 Activity 获取视图的主要内容,如果未能解决你的问题,请参考以下文章

区分从主屏幕启动的 Activity 或从 App 启动的另一个 Activity

Admob 横幅隐藏列表视图片段的最后一项

activity--常见属性总结

自制WheelView沉浸式菜单及Dialog样式Activit

Activity之间的跳转:

activit的切换