创建一个基于按钮活动打开另一个片段的android片段

时间:2013-10-14 05:12:46

标签: java android android-fragments

我正在尝试创建一个在运行时添加动态片段的活动。从那个片段我希望能够在按钮点击时打开其他六个片段。 [尽可能使用案例来实现这一点]

将其视为Windows 8 UI;有6个按钮,每个按钮都会打开一个新片段。

不幸的是我不知道如何解决这个问题。我似乎无法通过按钮将数据传递回主要活动。由于git事故,我也失去了相当多的代码。这是我重新创造的内容。

如果你有关于编码风格,语法,java,OO的任何提示,那些也是受欢迎的。我来自C背景。我的最终目标是为稍后的一些简单的语法糖创建一个replaceFragment(Frag)方法。虽然到目前为止我还没有成功实现这一点。

片段的另一个小问题 - 我试图在运行时动态添加它们 - 我是否需要在运行时创建所有这些?所以每个人都需要一个.add [饮片片段,菜单片段]或者我只需要做.replace

SingleFragmentActivity.java

 public abstract class SingleFragmentActivity extends FragmentActivity{
protected abstract Fragment createFragment();

FragmentManager fm = getSupportFragmentManager();


@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //Lock screen orientation for app

    Fragment frag = fm.findFragmentById(R.id.fragment_container);
    fm.beginTransaction()
    .add(R.id.fragment_container,frag)
    .commit();
}

}

Customer_Activity.java

public class Customer_Activity extends SingleFragmentActivity {

    public static Context appContext;

            @Override
            protected Fragment createFragment() {
                return new CustomerSelectionFragment();
            }
}

CustomerSelectionFragment

public class CustomerSelectionFragment extends Fragment implements OnClickListener{



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.customer_selection_fragment, container, false);
    //Buttons should be placed here?
    Button btnDrink = (Button) v.findViewById(R.id.Drink);
    btnDrink.setOnClickListener(this);

    Button btnMenu = (Button) v.findViewById(R.id.Menu);
    btnDrink.setOnClickListener(this);

    return v;
}

//implement the onClick method here
public void onClick(View v) {
   // Perform action on click
  switch(v.getId()) {
    case R.id.Drink:
     //Not sure how to pass "Create Drink Fragment to activity?
      break;
    case R.id.Menu:
      //Pass Create Menu fragment to activity?
      break;
      }
   }




  }

完全可以让人们出于善意的原因编辑我的帖子[清晰度等]。

1 个答案:

答案 0 :(得分:2)

片段之间的任何通信都应该通过活动来完成。这是开发者网站http://developer.android.com/training/basics/fragments/communicating.html的链接,该教程是关于片段之间的通信,几乎解释了所有内容。