我已经创建了我的想法,我希望它看起来如何.它有1个图像,一个输入框和一个按钮.我想在单击按钮时加载另一个活动.我很困惑为什么有碎片和活动.我是
Android界的新手(来自iOS).
我的理解是,活动与ViewControllers类似,但我不确定我是否了解片段是什么.
我在哪里处理事件?
package com.PHPpointofsale.PHPpointofsale; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.os.Build; public class StoreUrlActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_store_url); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container,new StoreUrlFragement()).commit(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.store_url,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button,so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class StoreUrlFragement extends Fragment { public StoreUrlFragement() { } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_store_url,container,false); return rootView; } } }
解决方法
首先,我建议阅读这个
Fragments.特别注意创建的片段部分,其中包括片段生命周期图.第二次下载并编译这个
Sample App,有效的导航应用程序将帮助您了解不同的片段如何协同工作,甚至实现一个操作栏.
为了回答你的问题或多或少,一个片段可以被认为是一个单独的类.一旦调用该特定片段,就可以从该类中调用函数.
Fragment Case-Switch
这是一些示例代码,向您展示我的意思.
public Fragment getItem(int i){ switch (i) { case 0: // The first section of the app is the most interesting -- it offers // a launchpad into the other demonstrations in this example application. return new LaunchpadSectionFragment(); case 1: return new BluetoothClass(); default: // The GPS section of the app . Fragment fragment = new DummySectionFragment(); Bundle args = new Bundle(); args.putInt(DummySectionFragment.ARG_SECTION_NUMBER,i + 1); fragment.setArguments(args); return fragment; } }
在这种情况下,我的每个片段都代表一个类,它在一个单独的选项卡中实现,每个选项卡都有一个单独的功能.片段的一个主要优点是,您可以在不先让一个活动完成的情况下运行单独的活动.
此外,每个片段都是java.lang.Object库的扩展.所以它具有所有这些功能.我也会阅读this.最后,为每个片段分别创建单独的xml文件是个好主意,然后在调用片段时可以单独显示它.
一些更多的代码
每个片段将/可能有这个
public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); // Do stuff on creation. This is usually where you add the bulk of your code. Like clickListners View rootview = inflater.inflate(R.layout.xml_the_fragment_uses container,false); rootview.findViewById(R.id.your_id).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Do something } }); } public void onStart(){ super.onStart(); Toast.makeText(getActivity(),"Fragment started",Toast.LENGTH_SHORT).show(); } public void onResume(){ super.onStart(); Toast.makeText(getActivity(),"Fragment Resumed",Toast.LENGTH_SHORT).show(); } public void onStop(){ super.onStart(); Toast.makeText(getActivity(),"Fragment Stoped",Toast.LENGTH_SHORT).show(); disableBT(); }
请记住,这些函数来自我前面提到的片段生命周期.
希望这能让你对片段有所了解.还记得阅读this,因为许多功能使用v7 app compat库.包括fragment manager.