【问题标题】:Need help to start a new activity from within a viewpager class in xamarin需要帮助才能从 xamarin 的 viewpager 类中开始新活动
【发布时间】:2016-07-22 15:43:20
【问题描述】:

我有一个包含 2 个布局的滑动选项卡界面。在第二个布局上,我有一个按钮,它必须启动一个将内容视图设置为新布局的活动。尝试启动活动时出现以下错误:

非静态字段、方法或属性“Fragment.StartActivity(Intent)”需要对象引用

ViewPager 类如下所示:

public class SamplePagerAdapter : PagerAdapter 
{

    List<string> items = new List<string>(); //This list called items contains the items that we add below

    public SamplePagerAdapter() : base() //This method creates the tabs on top
    {
        items.Add("Productivity Optimization");
        items.Add("Remote Health Monitoring");

    }

    public override int Count
    {
        get { return items.Count; } //This method returns the count of the tabs
    }


    public override bool IsViewFromObject(View view, Java.Lang.Object obj)
    {
        return view == obj;
    }


    public override Java.Lang.Object InstantiateItem(ViewGroup container, int position)
    {
        View view = LayoutInflater.From(container.Context).Inflate(Resource.Layout.PO, container, false);
        //***Original code***
        //View view = LayoutInflater.From(container.Context).Inflate(Resource.Layout.pager_item, container, false);

        //container.AddView(view);

        //TextView txtTitle = view.FindViewById<TextView>(Resource.Id.item_title);
        //int pos = position + 1;
        //txtTitle.Text = pos.ToString();

        //return view;
        //***end of original code***

        //This is where you set which layout to display in which order
        if (position == 0)
        {
            view = LayoutInflater.From(container.Context).Inflate(Resource.Layout.PO, container, false);
            container.AddView(view);

        }

        if (position == 1)
        {
            view = LayoutInflater.From(container.Context).Inflate(Resource.Layout.RHM, container, false);
            container.AddView(view);

            //New test button that should start the web browser activity
            var btnRep = (Button)view.FindViewById(Resource.Id.btnReport);
            btnRep.Click += BtnRep_Click;


        }

        return view;

    }
}

而发生错误的按钮点击方法如下所示: (错误在于StartActivity

private void BtnRep_Click(object sender, EventArgs e)
{

    var BrowserIntent = new Intent(Application.Context,typeof(ReportBrowserActivity));

    **StartActivity(BrowserIntent);**

}

我知道对于这个问题有很多类似的问题和答案,但我是 Xamarin 的新手,我似乎无法做到这一点。

我们将不胜感激任何对正确方向的帮助或推动。

【问题讨论】:

  • 点击方法中的行 (BrowserIntent) 可以尝试将 Application.Context 替换为 Context 吗?
  • @Pilatus,感谢您回复我。是的,我也尝试过,但随后出现以下错误:'Context' 是一种类型,在给定的上下文中无效。 这是在我将行更改为@987654328 之后@
  • 这可能是因为你从你的活动中调用Context 在这种情况下this 等于你的ActivityContext 尝试用this 替换Context
  • @Pilatus,我最初是这样写的,但它一直给我以下错误:CS1503 Argument 1: cannot convert from 'JoySmart_Solutions.SlidingTabsFragment.SamplePagerAdapter' to 'Android.内容.上下文'
  • 您需要引用Activity。如果您使用Fragment 来显示ViewPager,则可以通过Activity 属性访问此引用。

标签: android xamarin


【解决方案1】:

需要一个对象引用才能调用它的(非静态)方法。使用以下代码创建引用:

var myObject = new myObject()

你可以通过SamplePagerAdapter的构造函数传递这个引用。我假设您在 Fragment 中创建 SamplePagerAdapter (因为 OnViewCreatedActivity 中不可用)

mViewPager.Adapter = new SamplePagerAdapter(Activity);

构造函数将如下所示:

private Activity _activity;

public SamplePagerAdapter(Activity activity) : base() //This method creates the tabs on top
{
    _activity = activity;
    items.Add("Productivity Optimization");
    items.Add("Remote Health Monitoring");

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多