簡體   English   中英

Android findViewById返回null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM