【问题标题】:Find a TextView from a View that has been Inflated从已膨胀的视图中查找 TextView
【发布时间】:2014-03-26 07:23:38
【问题描述】:

在 Xamarin 中,如果我 InflateView,如何在 View 中设置 TextView 的文本?

我想编写一个应用程序,我可以在其中调用不同片段中的方法以在片段之间传递值并显示这些值。

这是我的MainActivity 代码:

public class MainActivity : FragmentActivity
{
    string message;

    FragmentOrange fragOrange;
    FragmentGreen fragGreen;
    FragmentRed fragRed;

    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        SetContentView (Resource.Layout.activity_main);

        fragOrange = new FragmentOrange ();
        fragGreen = new FragmentGreen ();
        fragRed = new FragmentRed ();

        List<Android.Support.V4.App.Fragment> fragments = new List<Android.Support.V4.App.Fragment>();
        fragments.Add(fragOrange);
        fragments.Add(fragGreen);
        fragments.Add(fragRed);

        MyPagerAdapter pageAdapter = new MyPagerAdapter(SupportFragmentManager, fragments);
        var pager = FindViewById<ViewPager>(Resource.Id.myViewPager);
        pager.Adapter = pageAdapter;

        pager.SetCurrentItem (0, true);
        fragOrange.SetMessage ("Fragment orange");
    }
}

这是我的FragmentOrange 代码:

public class FragmentOrange : Android.Support.V4.App.Fragment
{
    string message;
    TextView textViewDisplay;
    View view;

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        view = inflater.Inflate(Resource.Layout.fragment_orange, container, false);
        textViewDisplay = view.FindViewById<TextView>(Resource.Id.textViewDisplay);
        return view;
    }

    public void SetMessage(string value)
    {
        message = value;
        textViewDisplay.Text = value;
    }
}

当我调用SetMessage 函数时,我收到以下错误:

对象引用未设置为对象的实例

在这行代码处:

textViewDisplay.Text = value;

这是我的Layout 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:text="Text"
        android:id="@+id/textViewDisplay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

提前致谢

【问题讨论】:

  • 请用 log cat 编辑您的问题

标签: android android-layout xamarin android-view android-inflate


【解决方案1】:
var textView = view.FindViewById<TextView>(Resource.Id.textViewDisplay);

应该是

TextView textview = (TextView) findViewById(R.id.textViewDisplay);

请注意,您不能在没有处理程序的情况下从活动更新文本视图,因为它是 UI 的一部分。

//before oncreate
private int i;
Handler handler;

//oncreate
i = 0;
        handler = new Handler();
        handler.post(mUpdate);

//before the last closing bracket in your activity
     Runnable mUpdate = new Runnable(){
            public void run() {
                textview.setText("your string here");

                i++;

                handler.postDelayed(this, 1000);
            }
          };

【讨论】:

  • 你能告诉我我应该在我的应用程序中的什么地方有这个代码吗?
【解决方案2】:

改变这一行

    var textView = view.FindViewById<TextView>(Resource.Id.textViewDisplay);

对此:

    TextView textView = (TextView)view.findViewById(R.id.textViewDisplay);

你应该像这样定义和扩展你的视图:

    LinearLayout view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        view = (LinearLayout) inflater.inflate(
        R.layout.fragment_orange, container, false);

        return view;
    }  

【讨论】:

  • View 需要使用 LinearLayout 类型,还是只使用通用 View?
  • 我不确定。你需要尝试一下。但我认为您需要为父视图定义特定类型。
【解决方案3】:

试试看:

var textView = view.FindViewById<TextView>(Resource.Id.textViewDisplay);

改为:

TextView textview = (TextView) view.findViewById(R.id.textViewDisplay);

然后

view.text.setText(message);

【讨论】:

    【解决方案4】:
    TextView textView = view.FindViewById<TextView>(Resource.Id.textViewDisplay);
    

    在膨胀视图后在下面添加这一行。我的意思是OncreateView

    【讨论】:

    • 我已经这样做了,但是我仍然收到错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多