[英]Android findViewById returning null
我正在使用按鈕來調用將輸入文本放入textview的方法。 每當我使用findViewById時,它都會返回null。
public void encode(View view){
TextView out = (TextView) view.findViewById(R.id.encoderout);
EditText in = (EditText) view.findViewById(R.id.encoderin);
out.setText(in.getText().toString());
out.setTypeface(font);
}
我的xml在這里
<?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"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
>
<EditText android:id="@+id/encoderin"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:hint="Text to encode"/>
<Button android:id="@+id/encoderbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="encode"
android:text="Encode!"/>
</LinearLayout>
<TextView android:id="@+id/encoderout"
android:text="test"
android:layout_width="fill_parent"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"/>
</LinearLayout>
我幾乎可以找到的每個帖子都說清理項目有助於解決問題,但在這種情況下並不能解決問題。
編輯 :其他信息
我正在使用片段,這是我的片段代碼
public static class Encoder extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.encoder, container, false);
return view;
}
}
由於按鈕的工作方式,它正在調用Activity。 我可以在片段中調用find方法,但是不能在必須返回活動時調用。
我可以確認視圖不為null,當在方法中調用toString時,它可以正常打印。
解決方案 :從來沒有意識到我必須使用主視圖,以為我可以使用按鈕視圖。 我對此很陌生(從今天開始),謝謝大家的投入!
<Button android:id="@+id/encoderbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="encode"
android:text="Encode!"/>
Java代碼中的回調方法encode(View view)
中的參數view
是隨Button
視圖本身提供的,而不是由Activity
。
請參閱下面的參考:
http://developer.android.com/reference/android/widget/Button.html
Fragment
不會接收XML中聲明的onClick
的方法。 您需要改為在Activity
定義encode
,然后將所需的行為定向到適當的Fragment
。 煩人,但這就是它的完成方式。 建議您僅在Fragment
代碼中以編程方式實現OnClickListener
,以避免將片段和活動的行為交織在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.