Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用片段方法?_Java_Android_Android Fragments - Fatal编程技术网

Java 如何使用片段方法?

Java 如何使用片段方法?,java,android,android-fragments,Java,Android,Android Fragments,我正在尝试创建一个由我创建的多个应用程序组成的应用程序。此应用程序(My_app_Show)有一个导航抽屉,用于存放可能的应用程序片段。单击抽屉中的一个项目后,它将相应的片段膨胀到主活动占位符中。一旦视图出现,我就无法使用任何功能 public class MyAppShowActivity extends AppCompatActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks { /** * Fragm

我正在尝试创建一个由我创建的多个应用程序组成的应用程序。此应用程序(My_app_Show)有一个导航抽屉,用于存放可能的应用程序片段。单击抽屉中的一个项目后,它将相应的片段膨胀到主活动占位符中。一旦视图出现,我就无法使用任何功能

public class MyAppShowActivity extends AppCompatActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks {

/**
 * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
 */
private NavigationDrawerFragment mNavigationDrawerFragment;
/**
 * Used to store the last screen title. For use in {@link #restoreActionBar()}.
 */
private CharSequence mTitle;

protected static int frag = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_app_show);

    mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
    mTitle = getTitle();

    // Set up the drawer.
    mNavigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));

}

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.container, PlaceholderFragment.newInstance(position)).commit();
}

public void onSectionAttached(int number) {
    switch (number) {
        case 0:
            frag = 0;
            mTitle = getString(R.string.title_section0);
        case 1:
            frag = 1;
            mTitle = getString(R.string.title_section1);
            break;
        case 2:
            frag = 2;
            mTitle = getString(R.string.title_section2);
            break;
        case 3:
            frag = 3;
            mTitle = getString(R.string.title_section3);
            break;
        case 4:
            frag = 4;
            mTitle = getString(R.string.title_section4);
            break;
        case 5:
            frag = 5;
            mTitle = getString(R.string.title_section5);
            break;
    }
}

public void restoreActionBar() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    actionBar.setDisplayShowTitleEnabled(true);
    actionBar.setTitle(mTitle);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!mNavigationDrawerFragment.isDrawerOpen()) {
        // Only show items in the action bar relevant to this screen
        // if the drawer is not showing. Otherwise, let the drawer
        // decide what to show in the action bar.
        getMenuInflater().inflate(R.menu.my_app_show, menu);
        restoreActionBar();
        return true;
    }
    return super.onCreateOptionsMenu(menu);
}

@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();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = null;

        switch (frag) {
            case 1:
                view = inflater.inflate(R.layout.fragment_activity_my, container, false);
                break;
            case 2:
                view = inflater.inflate(R.layout.fragment_tic_tac_toe, container, false);
                break;
            case 3:
                view = inflater.inflate(R.layout.fragment_d_side_main, container, false);
                break;
            case 4:

                break;
            case 5:
                view = inflater.inflate(R.layout.fragment_gestures, container, false);
                break;

        }

        return view;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MyAppShowActivity) activity).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER));
    }
}
这是我的主要活动,下面是我的第一个“应用程序”的一个示例,我正试图将其变成一个片段来使用我的新应用程序:

public class MyActivity extends Fragment {

public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE";

private OnFragmentInteractionListener mListener;
protected ArrayAdapter adp;

public MyActivity() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ArrayList<OnFragmentInteractionListener> things = new ArrayList<>();
    adp = new ArrayAdapter(this.getActivity(), things.size());
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_activity_my, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState){
    ListView lv = (ListView) view.findViewById(R.id.navigation_drawer);
    lv.setAdapter(adp);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    Intent intent = new Intent(this.getActivity(), DisplayMessageActivity.class);
    EditText editText = (EditText)this.getActivity().findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    getActivity().startActivity(intent);
}

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    this.getActivity().getMenuInflater().inflate(R.menu.menu_my, 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();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (OnFragmentInteractionListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

/**
 * This interface must be implemented by activities that contain this
 * fragment to allow an interaction in this fragment to be communicated
 * to the activity and potentially other fragments contained in that
 * activity.
 * <p/>
 * See the Android Training lesson <a href=
 * "http://developer.android.com/training/basics/fragments/communicating.html"
 * >Communicating with Other Fragments</a> for more information.
 */
public interface OnFragmentInteractionListener {
    public void onFragmentInteraction(Uri uri);
}

有人能告诉我需要做什么才能使片段正常工作吗?

根据您描述的错误判断,您调用了
sendMessage
并传递了
视图
参数。但是,代码中的
sendMessage()
方法不接受任何参数。

很抱歉,我更改了该方法,希望它能正常工作,但现在如果您查看,它的视图显示了我收到消息时的位置。您能在帖子中包含完整的错误日志吗?这应该能更好地说明问题
11-08 13:13:40.602  25322-25322/com.example.darnell.my_app_show E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.darnell.my_app_show, PID: 25322
java.lang.IllegalStateException: Could not find method sendMessage(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton
        at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:310)
        at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:269)
        at android.view.View.performClick(View.java:4764)
        at android.view.View$PerformClick.run(View.java:19833)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5290)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)