2016-04-03 2 views
1

アクティビティ内のRelativeLayoutブロックをVISIBLEに設定する必要があります。しかし、私はそうのような変数にRelativeLayoutを割り当てるように見えることはできません。android:XMLで定義されたIDを使用してRelativeLayoutを初期化/拡張する方法

Relative Layout alarmSetBlock = (RelativeLayout) findViewById(R.id.sleep_text_block); 

alarmSetBlockが割り当てられているnull代わりに。

私はinflater.inflateのようなものを使用すると思われますが、フラグメントの外側で使用する方法はわかりません。

これを解決する最も簡単な方法を教えてください。

レイアウトのxml:私は初期化しようとしています

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp"> 
     <Button 
      android:id="@+id/alarm_set_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:paddingLeft="20dp" 
      android:paddingRight="20dp" 
      android:paddingBottom="10dp" 
      android:paddingTop="10dp" 
      android:background="@color/mediumGray" 
      android:text="SET ALARM" 
      android:onClick="showTimePickerDialog"/> 
    </RelativeLayout> 


    <RelativeLayout 
     android:id="@+id/sleep_text_block" 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:visibility="gone"> 
     <TextView 
      android:id="@+id/sleep_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="50dp" 
      android:layout_centerHorizontal="true" 
      android:textSize="20sp" 
      android:text="Alarm set to :"/> 

     <TextView 
      android:id="@+id/alarm_time" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="20dp" 
      android:layout_centerHorizontal="true" 
      android:layout_below="@id/sleep_text" 
      android:textColor="@color/colorAccent" 
      android:textSize="36sp" /> 
    </RelativeLayout> 

</LinearLayout> 

RelativeLayoutは、レイアウトに2番目のです。

上記のレイアウトのフラグメントファイルは次のとおりです。私はRelativeLayoutを初期化しようとしていますが、このフラグメントを保持するアクティビティjavaファイル内にあります。

public class SleepSetFragment extends Fragment { 

    public static SleepSetFragment newInstance() 
    { 
     SleepSetFragment fragment = new SleepSetFragment(); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) 
    { 
     return inflater.inflate(R.layout.fragment_sleep_set, container, false); 
    } 
} 
+0

ようにあなたがあなたの活動のXMLを追加することはできますか? –

+0

これはうまくいくはずです、複数のレイアウトフォルダを使用していますか?各XMLにもIDが設定されていることを確認してください。 –

+0

私のすべてのレイアウトは私のres/layoutフォルダーにあります。各XMLにIDを設定するにはどうすればよいですか?あなたが 'android:id'を使ってIDを定義することを意味するなら、私はすでにここでそれを行っています。 –

答えて

1

あなたはonCreateView(上のXMLレイアウトを膨らませるのを忘れて)この

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

      View view = inflater.inflate(R.layout.your_layout, container, false); 

      RelativeLayout alarmSetBlock = (RelativeLayout) view.findViewById(R.id.sleep_text_block); 
alarmSetBlock.setVisibility(Visibility.VISIBLE); 

      return view; 
     } 
+0

私の「RelativeLayout」の可視性はどこで設定しますか? 'onCreateView()'メソッド自体と、それが接続されている 'SharedPreference'ロジックと一緒に行うべきですか? –

+0

RelativeLayout alarmSetBlockラインのすぐ下 –

+0

フラグメントとアクティビティのライフサイクルが異なるため、レビューすることができます。 –

1

アクティビティからフラグメント内のビューを取得しようとしています。 このような場合はfindViewById()を使用することはできません。代わりに、特定のビューを取得するために、フラグメントからパブリックメソッドを公開する必要があります。しかし、あなたのフラグメントを膨らませて、それを呼び出す前にアクティビティに追加するようにしてください。

はここに例を示しますhttps://stackoverflow.com/a/17023533/1395437

+0

'RelativeLayout'はonCreateView()を持つフラグメントファイルにあります –

+0

フラグメント内のアクティビティ内のビューを取得しようとしていますか?あなたの活動の断片? –

+0

アクティビティ内のフラグメントのビューを取得しようとしています。 –

関連する問題