2016-09-26 55 views
2

我有一个活动的ist片段设置为普通potrait方向,但加载第二个片段时,我需要锁定第二个片段的方向为横向。有可能这样做吗?如何锁定片段的屏幕方向为在运行时横向

这是我的Java片段类

public class DeputationsFragment extends Fragment implements AdapterView.OnItemSelectedListener{ 
    LinearLayout ll; 
    RecyclerView recyclerView; 
    SessionManager sessionManager; 
    CheckBox checkBox; 
    Spinner reportType; 
    String[] reportTypes,reportCodes; 
    String reportCode; 




    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     return inflater.inflate(R.layout.fragment_deputations, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     sessionManager=SessionManager.NewInstance(getActivity()); 
     ll=(LinearLayout)view.findViewById(R.id.ll1); 
     recyclerView=(RecyclerView)view.findViewById(R.id.recyclerView); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     checkBox=(CheckBox)view.findViewById(R.id.sno); 
     reportType=(Spinner)view.findViewById(R.id.spin_report); 
     reportType.setOnItemSelectedListener(this); 
     if(Constants.isOnline()) 
     { 
      getTypes(); 
     } 

    } 

    @Override 
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
     reportCode=reportCodes[i]; 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> adapterView) { 

    } 


    private void getTypes() 
    { 
     AsyncHttpClient client=new AsyncHttpClient(); 
     String url=getResources().getString(R.string.urlReportType); 
     Constants.showProgress(getActivity()); 
     client.get(url, new TextHttpResponseHandler() { 
      @Override 
      public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { 

      } 

      @Override 
      public void onSuccess(int statusCode, Header[] headers, String responseString) { 
       Constants.dismissProgress(); 
       try { 
        int p1 = responseString.indexOf(">"); Constants.dismissProgress(); 
        Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show(); 
        int p2 = responseString.lastIndexOf("<"); 
        String r = responseString.substring(p1 + 1, p2); 
        p1 = r.indexOf(">"); 
        r = r.substring(p1 + 1, r.length()); 
        JSONArray jsonArray = new JSONArray(r); 
        reportTypes = new String[jsonArray.length()]; 
        reportCodes = new String[jsonArray.length()]; 
        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject jsonObject = jsonArray.getJSONObject(i); 
         reportTypes[i] = (jsonObject.getString("Name")); 
         reportCodes[i] = (jsonObject.getString("Value")); 
        } 
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, reportTypes); 
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        reportType.setAdapter(arrayAdapter); 
        reportType.setSelection(0); 
        reportCode = reportCodes[0]; 
        getDeputations(); 

       } catch (Exception e) { 
        Constants.dismissProgress(); 
        Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
     } 

    void getDeputations() 
    { 
     Constants.showProgress(getActivity()); 
     AsyncHttpClient client = new AsyncHttpClient(); 
     RequestParams params = new RequestParams(); 
     String url=getResources().getString(R.string.urlDeputationRequest); 
     params.put("DistrictCode","ydRRTTxkdt6Trx91pX1+cA=="); 
     params.put("ReportType","1"); 
     client.get(url, params, new TextHttpResponseHandler() { 
      @Override 
      public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { 

      } 

      @Override 
      public void onSuccess(int statusCode, Header[] headers, String responseString) { 
       try { 
        Constants.dismissProgress(); 
        int p1 = responseString.indexOf(">"); 
        int p2 = responseString.lastIndexOf("<"); 
        String r = responseString.substring(p1 + 1, p2); 
        p1 = r.indexOf(">"); 
        r = r.substring(p1 + 1, r.length()); 
        JSONArray jsonArray = new JSONArray(r); 
        RecyclerDeputations recyclerDeputations=new RecyclerDeputations(jsonArray,getActivity()); 
        ll.setVisibility(View.VISIBLE); 
        recyclerView.setAdapter(recyclerDeputations); 
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

       } 
       catch (Exception e) 
       { 

       } 
      } 
     }); 
    } 


} 

这是布局文件:

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

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:id="@+id/ll" 
     android:background="@color/colorAccent" 
     android:layout_marginTop="10dp" 
     android:weightSum="4"> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="5dp" 
      android:layout_weight="1.7" 
      android:gravity="right" 
      android:padding="3dp" 

      android:text="Report Type" 
      android:textStyle="bold" /> 

     <RelativeLayout 
      android:layout_width="0dp" 
      android:layout_height="30dp" 
      android:layout_weight="2.3" 
      android:gravity="left" 
      android:padding="3dp" 
      android:background="@color/white" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="5dp"> 
      <Spinner 
       android:id="@+id/spin_report" 
       android:layout_width="match_parent" 
       android:popupBackground="@color/white" 
       android:gravity="left" 
       android:layout_height="match_parent" 
       android:textSize="8sp" 
       android:scrollbars="horizontal"/> 
     </RelativeLayout> 
    </LinearLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:weightSum="8.5" 
    android:background="#386FA5" 
    android:id="@+id/ll1" 
    android:orientation="horizontal"> 


    <CheckBox 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1.3" 
     android:gravity="center_vertical" 
     android:layout_gravity="start" 
     android:text="All" 
     android:background="@drawable/borders" 
     android:id="@+id/sno"/> 

    <TextView 
     android:layout_width="0dp" 
     android:text="S.No." 
     android:gravity="start" 
     android:layout_gravity="start" 
     android:background="@drawable/borders" 
     android:id="@+id/serial" 
     android:textSize="12sp" 
     android:padding="3dp" 
     android:layout_height="match_parent" 
     android:layout_weight=".5" /> 
    <TextView 

     android:layout_width="0dp" 
     android:text="Name" 
     android:id="@+id/name" 
     android:gravity="start" 
     android:layout_gravity="start" 
     android:textSize="12sp" 
     android:background="@drawable/borders" 
     android:padding="3dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" /> 
    <TextView 

     android:layout_width="0dp" 
     android:id="@+id/from" 
     android:gravity="start" 
     android:textSize="12sp" 
     android:layout_gravity="start" 

     android:text="From" 
     android:background="@drawable/borders" 
     android:padding="3dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1.4" /> 
    <TextView 

     android:layout_width="0dp" 
     android:id="@+id/to" 
     android:text="To" 
     android:gravity="start" 
     android:textSize="12sp" 
     android:layout_gravity="start" 
     android:background="@drawable/borders" 
     android:padding="3dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1.3" /> 

    <TextView 

     android:layout_width="0dp" 
     android:id="@+id/req_date" 
     android:text="Request Date" 
     android:gravity="start" 
     android:textSize="12sp" 
     android:layout_gravity="start" 
     android:background="@drawable/borders" 
     android:padding="3dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" /> 

    <TextView 

     android:layout_width="0dp" 
     android:id="@+id/pending" 
     android:text="Pending With" 
     android:gravity="start" 
     android:textSize="12sp" 
     android:layout_gravity="start" 
     android:background="@drawable/borders" 
     android:padding="3dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" /> 
    <TextView 

     android:layout_width="0dp" 
     android:id="@+id/remarks" 
     android:text="Remarks" 
     android:gravity="start" 
     android:textSize="12sp" 
     android:layout_gravity="start" 
     android:background="@drawable/borders" 
     android:padding="3dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" /> 
</LinearLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white"/> 
</LinearLayout> 
+0

请发布您的代码 – Basi

+0

发布完成 –

+0

http:// stackoverflow。com/questions/12704009/setting-the-orientation-for-only-1-fragment-in-my-activity-while-the-rest-is-in – kgandroid

回答

2

我已经实现相同的功能自己。除了一个片段以外,我的应用程序被锁定为肖像模式。为了实现正确的功能,我使用android:screenOrientation="nosensor"作为活动(在Manifest文件中),防止由于用户旋转设备而导致方向改变。

我还使用android:configChanges="keyboardHidden|orientation|screenSize"来防止活动在方向更改时重新启动。否则,很容易在活动重新开始的循环中结束,进入正确的片段并再次改变方向,重复。

在该片段中的onResume()方法我称之为getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);和它的onPause()我打电话getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

希望这可以帮助你!

+0

我要实施这个,然后告诉你结果。只要给我10分钟队友 –

+0

很好的答案队友。你是一个摇滚明星。 –

+0

很高兴帮助:) – Joakim

1

试试这个在您的onCreate设置Landscape编程您activities or fragments

活动

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

片段

rootView后在Java中加入这一行

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
1

定位属性是每个活动,这样你可以宣布定向为只包含片段的活动,以便它处于横向和横向位置其余的活动将保持原样。

所以你需要设置方位onCreateView每个片段的 PLSE检查下面的代码:

FragmentA

public class FragmentA extends Fragment { 


     @Override 

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

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


      return view; 

     } 

    } 

public void changeFragmentOrientation(){ 
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 

FragmentB

public class FragmentB extends Fragment { 


      @Override 

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

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


       return view; 

      } 

     } 

    public void changeFragmentOrientation(){ 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } 
1

覆盖功能setUserVisibleHint()在第二个片段,然后用以下代码

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if(isVisibleToUser) { 
     Activity curActivity = getActivity(); 
     if(curActivity != null){ 
      curActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
    } 
} 
1

这将是最好的选择。

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
super.setUserVisibleHint(isVisibleToUser); 
if(isVisibleToUser) { 
    Activity a = getActivity(); 
    if(a != null)  a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 
} 

好运与乌尔项目:)

+0

这是一个'Fragment',你不需要声明'Fragments 'on AndroidManifest.xml'然后...答案是不正确的。 – Aspicas