Xamarin C # - установить TextView из другого макета - PullRequest
0 голосов
/ 04 января 2019

У меня проблема.

Это упрощенный код, который я использую:

public void LoadOrderPage()
{
    Android.Support.V4.View.ViewPager SummaryWalletSwitcher =
          FindViewById<Android.Support.V4.View.ViewPager>(Resource.Id.SummaryWalletSwitcher);

    List<View> viewlist = new List<View>();
    viewlist.Add(LayoutInflater.Inflate(Resource.Layout.AgentSummary, null, false));
    viewlist.Add(LayoutInflater.Inflate(Resource.Layout.AgentWallet, null, false));
    SummaryWalletAdapter ViewSwitchAdapter = new SummaryWalletAdapter(viewlist);
    SummaryWalletSwitcher.Adapter = ViewSwitchAdapter;

    LoadAgentInfo(null, null);

    Timer AgentInfo_Timer = new Timer();
    AgentInfo_Timer.Interval = 1000;
    AgentInfo_Timer.Elapsed += LoadAgentInfo;
    AgentInfo_Timer.Enabled = true;
}

public void LoadAgentInfo(object sender, ElapsedEventArgs e)
{
    TextView TextView1 = FindViewById<TextView>(Resource.Id.txtPortfolioValue);      
    TextView1.Text = "This is TextView 1";
}

TextView находится внутри Resource.Layout.AgentSummary.Таймер работает нормально каждую секунду!

Но когда я вызываю LoadAgentInfo(null, null);, он говорит, что TextView внутри этой функции является пустой ссылкой.Причина этого заключается в том, что я использую 2 макета на одной странице с помощью ViewPager.

Я уже пытался раздуть макет, откуда пришел идентификатор, следующим образом:

var InflatedAgentSummary = LayoutInflater.Inflate(Resource.Layout.AgentSummary, null);
TextView TextView1 = 
     InflatedAgentSummary.FindViewById<TextView>(Resource.Id.txtPortfolioValue);

Но тогдаTextView никогда не меняется!

Что я делаю не так?

1 Ответ

0 голосов
/ 07 января 2019

Вы должны кешировать ссылку на раздутое представление AgentSummary и использовать ее для получения доступа к вашему TextView:

private View _agentSummary;

public void LoadOrderPage()
{
    Android.Support.V4.View.ViewPager SummaryWalletSwitcher = FindViewById<Android.Support.V4.View.ViewPager>(Resource.Id.SummaryWalletSwitcher);

    List<View> viewlist = new List<View>();
    _agentSummary = LayoutInflater.Inflate(Resource.Layout.AgentSummary, null, false);
    viewlist.Add(_agentSummary);
    viewlist.Add(LayoutInflater.Inflate(Resource.Layout.AgentWallet, null, false));
    SummaryWalletAdapter ViewSwitchAdapter = new SummaryWalletAdapter(viewlist);
    SummaryWalletSwitcher.Adapter = ViewSwitchAdapter;

    LoadAgentInfo(null, null);

    Timer AgentInfo_Timer = new Timer();
    AgentInfo_Timer.Interval = 1000;
    AgentInfo_Timer.Elapsed += LoadAgentInfo;
    AgentInfo_Timer.Enabled = true;
}

public void LoadAgentInfo(object sender, ElapsedEventArgs e)
{
    TextView TextView1 = _agentSummary.FindViewById<TextView>(Resource.Id.txtPortfolioValue);      
    TextView1.Text = "This is TextView 1";
}

Причина, по которой текст не изменился при вашей попытке сделать этоВы надули новый экземпляр AgentSummary, поэтому вы фактически изменили текст этого нового экземпляра InflatedAgentSummary, который был немедленно отброшен после окончания LoadAgentInfo.

...