【问题标题】:Wont find R.Id. in fragment找不到 R.Id。在片段中
【发布时间】:2013-05-30 20:47:51
【问题描述】:

我正在尝试获取一个文本视图以链接到一个站点,但它在 android 中找不到来自 xml 的 id。任何帮助都会很棒。这是代码

它不会找到 R.id.textviewlink

public class Fragment_2 extends Fragment{
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

        return inflater.inflate(R.layout.fragment_2, null);

        TextView t2 = (TextView) getView().findViewById(R.id.textviewlink);
        t2.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

XML

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="10dip"
android:paddingLeft="10dip"
android:paddingRight="10dip" 
android:background="@drawable/backgroundw">

<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

            <TextView
    android:id="@+id/textviewlink"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="Free PDF Download"
    android:linksClickable="true"/>

    </LinearLayout>
    </ScrollView>
    </RelativeLayout>

【问题讨论】:

    标签: android xml android-layout android-xml android-identifiers


    【解决方案1】:

    那是因为您在找到视图项之前已经返回了膨胀的布局。有两种选择。

    首先,inflate() 方法总是需要三个参数:

    inflater.inflate(R.layout.file_name, container, false);
    

    将以下内容放入onStart

    TextView t2 = (TextView) getView().findViewById(R.id.textviewlink);
    t2.setMovementMethod(LinkMovementMethod.getInstance());
    

    或者直接使用这个:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
       View v = inflater.inflate(R.layout.fragment_2, container, false); //don't forget the third argument here
       TextView t2 = (TextView) v.findViewById(R.id.textviewlink);
       t2.setMovementMethod(LinkMovementMethod.getInstance());
    
       return v;
     }
    

    【讨论】:

    • 两种方法都没有出现,但是“不要忘记这里的第三个参数”是什么意思
    • public class Fragment_2 extends Fragment{ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ return inflater.inflate(R.layout.fragment_2, null); } public void onStart() { TextView t2 = (TextView) getView().findViewById(R.id.textviewlink); t2.setMovementMethod(LinkMovementMethod.getInstance()); } }
    • "eturn inflater.inflate(R.layout.fragment_2, null);" inflate() 方法需要三个参数,您的布局 xml、ViewGroup 和一个布尔值 attachToRoot。我会更新我的答案。
    • 在您发布在 cmets 中的代码(应该编辑到您的问题中)中,您也从未调用过 super.onStart()。如果使用该方法,您需要先调用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2023-03-05
    相关资源
    最近更新 更多