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

相关问题