0

請幫幫我。我想顯示片段類List到MainActivity中。我嘗試主要活動new();但它顯示空白頁面,但是當我將所有數據放入mainActivity並運行時,它會顯示數據列表。實際上,我想學習如何從其他課程中獲取這種方法,使其成爲主要活動。如何在MainActivity類中調用單獨Fragement類的onCreateView?

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     new ForecastFragment(); 
    } 


//----------------- A Separate ForecastFragment Class ------ 

public class ForecastFragment extends Fragment { 

    public ForecastFragment() { 

    } 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     String[] data={ 
       "Sunday", 
       "Monday", 
       "Tuesday", 
       "Wednesday", 
       "Thursday", 
       "Friday", 
       "Saturday" 
     }; 
     ArrayAdapter<String> adapter; 
     View rootView=inflater.inflate(R.layout.list_item_forecast,container,false); 

     ListView listView =(ListView)rootView.findViewById(R.id.listview); 
     List<String> listData=new ArrayList<String>(Arrays.asList(data)); 
     adapter=new ArrayAdapter<String>(
       getActivity(),R.layout.list_item_forecast,R.id.textView,listData); 
     listView.setAdapter(adapter); 
     return rootView; 
    } 
} 

回答

0

在你的MainActivity layout file中,你應該有一個FrameLayout它將包含你的片段。

<FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

現在,在您MainActivity類,你會實例化片段是這樣的:

getSupportFragmentManager().beginTransaction() 
       .add(R.id.fragment_container, new ForecastFragment(), ForecastFragment.class.getSimpleName()).commit(); 

你可以在你的MainActivity類中的任何點實例化片段如上。在你的情況,你應該做的是,在MainActivity's onCreate()

如果你不想使用Android支持的版本庫,你可以使用:

getFragmentManager().beginTransaction() 
        .add(R.id.fragment_container, new ForecastFragment(), ForecastFragment.class.getSimpleName().commit(); 
+0

謝謝Shadab Ansari先生,之後將ForecastFragment.getClass更改爲ForecastFragment.class並添加.cummit();比它的工作。現在它可以工作。 :) – Santosh

+0

哦,是的,我錯過了添加提交()。感謝您的注意。爲未來編輯我的答案。 –

0

通過調用new你不能只是實例化一個片段,你必須將它添加到堆棧:

getFragmentManager() 
    .beginTransaction() 
    .add(R.id.container, new ForecastFragment(), "fragment_tag") 
    .commit(); 

凡R.id.container在佈局(容器通常是FrameLayou)來保存你的片段。

+0

由於它的工作原理。這裏是我的代碼:getFragmentManager() .beginTransaction() .add(R.id.fragment_container,new ForecastFragment(),ForecastFragment.class.getSimpleName()) .commit(); – Santosh

相關問題