我应该使用哪个fragmentManager

时间:2014-08-29 04:06:00

标签: android android-fragments datepicker android-fragmentactivity

我正在使用片段并尝试制作一个表格,我可以使用datepicker获取日期后将其存储在数据库中(现在没有问题)问题是我正在按照指南学习如何使用datepicker碎片活动。我得到了一对问题(和错误) 我一直在使用This guide

我得到了这个错误:

  

“对于类型”

,方法getSupportFragmentManager未定义

我读过“片段”中没有getSupportFragmentManager,但它们位于“FragmentActivity”中

“碎片”中有一个等效的方法?或者我应该做什么。

我正在搜索和阅读很多指南,但这是我找到并且遇到这个问题的简单方法。

我将发布我的Fragment类,片段xml和datepickerfragment

FragmentClass(regventa_Fragment)..

public class Regventa_Fragment extends Fragment  {
public Button guardar;
public Button fecha_button;

public Regventa_Fragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_regventa, container, false);

    Toast.makeText(getActivity(), "Hola", Toast.LENGTH_SHORT).show();


    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    guardar=(Button)getView().findViewById(R.id.guardar);
    //fecha_button=(Button)getView().findViewById(R.id.fecha_button);
    getView().findViewById(R.id.fecha_button).setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View v) {
            showDatePicker();
           }

        private void showDatePicker() {
            // TODO Auto-generated method stub

        }
          });
}

private void showDatePicker() {
      DatePickerFragment date = new DatePickerFragment();
      /**
       * Set Up Current Date Into dialog
       */
      Calendar calender = Calendar.getInstance();
      Bundle args = new Bundle();
      args.putInt("year", calender.get(Calendar.YEAR));
      args.putInt("month", calender.get(Calendar.MONTH));
      args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
      date.setArguments(args);
      /**
       * Set Call back to capture selected date
       */
      date.setCallBack(ondate);
      date.show(getFragmentManager(), "Date Picker");
     }

     OnDateSetListener ondate = new OnDateSetListener() {
      @Override
      public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
      }
     };

}

fragment_regventa.XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="15dp"
    android:gravity="center_horizontal" >

    <Button
        android:id="@+id/guardar"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/guardar" />

    <Button
        android:id="@+id/borrar"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/borrar" />
</LinearLayout>

<Button
    android:id="@+id/fecha_button"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/fecha_venta"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="15dp"
    android:text="@string/fecha_button" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="@string/regventa"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/comprador"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:ems="10"
    android:hint="@string/comprador" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/fecha_venta"
    style="android:editTextStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/fecha_button"
    android:layout_below="@+id/comprador"
    android:layout_marginTop="17dp"
    android:ems="10"
    android:hint="@string/fecha_venta"
    android:textAlignment="center"
    android:textSize="17sp" />

<EditText
    android:id="@+id/elevendidos"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/pesoventa"
    android:layout_below="@+id/pesoventa"
    android:layout_marginTop="24dp"
    android:ems="10"
    android:hint="@string/elementos_vendidos"
    android:inputType="number" />

<EditText
    android:id="@+id/pesoventa"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/comprador"
    android:layout_below="@+id/fecha_button"
    android:layout_marginTop="14dp"
    android:ems="10"
    android:hint="@string/pesoventa" />

DatePicker Fragmentent

public class DatePickerFragment extends DialogFragment {
OnDateSetListener ondateSet;

public DatePickerFragment() {
}

public void setCallBack(OnDateSetListener ondate) {
ondateSet = ondate;
}

private int year, month, day;

@Override
public void setArguments(Bundle args) {
super.setArguments(args);
year = args.getInt("year");
month = args.getInt("month");
day = args.getInt("day");
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(getActivity(), ondateSet, year, month, day);
}
}

如果我从“Fragment”改为“FragmentActivity”那么这会很好吗?我有其他片段吗?..谢谢

3 个答案:

答案 0 :(得分:1)

getSupportFragmentManager()适用于android支持库

这意味着

如果使用支持库,则必须使用getSupportFragmentManager() 否则你必须使用getFragmentManager()

验证检查您的导入

import android.support.v4.app.Fragment; 意味着您使用支持库 那么你必须使用getSupportFragmentManager()

导入android.app.Fragmentment 意味着你使用本机库 那么你必须使用getFragmentManager()

Gud Luck:)

答案 1 :(得分:1)

我解决了问题..我正在使用

import android.support.v4.app.Fragment 

而不是......

import android.app.Fragment;

在DatepickerFragment中。

之后我用...

date.show(getActivity().getFragmentManager(), "Date Picker");

谢谢

答案 2 :(得分:0)

首先,你需要了解FragmentActivity和amp;之间的差异。分段。 FragmentActivity是Activity&amp;的子类。活动持有Fragment&amp;两个是不同的东西。 请参阅以下链接&amp;看看该片段不会从Activity继承。

因此,如果你需要使用getSupportFragmentManager(),那么首先调用包含片段&amp;的活动。调用fragmentManager。喜欢:getActivity().getSupportFragmentManager()

另一件事是,如果您使用支持库中的Fragment,那么您会得到“getSupportFragmentManager()”其他明智的“getFragmentManager()

由于