2017-07-28 9 views
1

私はFragmentを作成し、それをKabarと呼んで、ButtonTextViewが期待通りに表示されることがわかりました。どこでFindViewById()とリスナーをフラグメントに追加できますか?

は、ここに私のFragment次のとおりです。

public class Kabar extends Fragment { 
    private Button button; 
    private TextView text; 

    public Kabar() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v= inflater.inflate(R.layout.fragment_kabar , container, false); 
     return v; 
    } 
} 

これは私のfragment_kabarレイアウトです:私はButtonTextViewを使用する必要が

<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.examplee.my.Kabar"> 

    <!-- TODO: Update blank fragment layout --> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <TextView 
      android:id="@+id/tt1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="mohsen kabar" /> 

     <Button 
      android:id="@+id/tt2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="113dp" 
      android:text="Button" 
      android:layout_below="@+id/mohsenkabar" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:layout_marginRight="93dp" 
      android:layout_marginEnd="93dp" /> 
    </RelativeLayout> 

このコードはどこに置くことができますか?

text=(TextView) text.findViewById(R.id.tt1); 
button=(Button) button.findViewById(R.id.tt2); 
button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     tt1.setText("kkk mmm bbb ddd"); 
    } 
}); 

答えて

1

これはあなたのkabarフラグメント

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v= inflater.inflate(R.layout.fragment_kabar , container, false); 

     TextView text=(TextView) v.findViewById(R.id.tt1); 
     TextView button=(TextView) v.findViewById(R.id.tt2); 

     button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     text.setText("kkk mmm bbb ddd"); 
     } 
    }); 
    return v; 
} 
2

onCreateView(優先)メソッドをonViewCreated 2つのオプションがありますにこのコードを追加してみてください。

すぐonCreateView(LayoutInflater、のViewGroup、 バンドル)後に呼び出され

void onViewCreated (View view, Bundle savedInstanceState)

が戻ってきたが、任意の保存された状態では、ビューに に復元されている前に。これにより、ビュー階層が完全に作成されたことがわかると、サブクラスは を初期化する機会を与えます。ただし、 フラグメントのビュー階層は、この時点では親の に関連付けられていません。

+0

このリンクでは質問に答えることができますが、ここでは回答の重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](レビュー/低品質の投稿/ 16860151) – MikeT

+0

ありがとうございました。 – santalu

1

あなたのKabar FragmentOnCreateViewであなたのコードを追加する必要があり、あなたのコード内で

text=(TextView) v.findViewById(R.id.tt1); 
button=(Button) v.findViewById(R.id.tt2); 
button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     text.setText("kkk 'mmm' 'bbb' 'ddd'"); 
    } 
}); 
1

にfolowingであなたのコードを置き換えます。

public class Kabar extends Fragment { 

    private Button button; 
    private TextView text; 

    public Kabar() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v = inflater.inflate(R.layout.fragment_kabar , container, false); 

     TextView text = (TextView) v.findViewById(R.id.tt1); 
     Button button = (Button) v.findViewById(R.id.tt2); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       text.setText("kkk mmm bbb ddd"); 
      } 
     }); 
     return v; 
    } 
} 
+0

あなたの質問に答えた場合は、正解とマークするのに気にしないでください –

1

をこの変更を行うonCreateView

text =(TextView) v.findViewById(R.id.tt1); 
button=(Button) v.findViewById(R.id.tt2); 
button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     text.setText("kkk mmmm bbbb ddd"); 
    } 
}); 
関連する問題