8

Android開発を学んでいます。とても簡単なはずのことに行き詰ってしまいます。

1 つのアクティビティ、2 つのフラグメント、1 つのインターフェイスでアプリを作成しています。

android:minSdkVersion="11"
android:targetSdkVersion="19

したがって、メイン アクティビティでは、マネージャーを使用してフラグメント B への参照を作成しようとしています。Eclispse がいくつかのことを変更するように指示しているため、ここで行き詰まります (以下を参照)。

私の意図:`

@Override
    public void respond(int i) {
        // TODO Auto-generated method stub

    FragmentManager manager =getFragmentManager();
    FragmentB f2= (FragmentB) manager.findFragmentById(R.id.fragment2);

}`

これを行うと、エラーメッセージが表示され、いくつかの変更を行う必要があります。変更後、コードは次のようになります (それでも FragmentB に到達できません)。

    @Override
public void respond(int i) {
    // TODO Auto-generated method stub

    android.app.FragmentManager manager =getFragmentManager();
    android.app.Fragment f2=  manager.findFragmentById(R.id.fragment2);

}

詳細については、アクティビティのインポート ヘッダーもここに追加します。

  package com.example.modular_ui;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.app.Activity;
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 MainActivity extends Activity implements Communicator{....

ここで何が欠けていますか?support.v4 /support.v7 全体は、初心者にとっては少し混乱します。

編集:に変更した後:

    import android.app.Fragment;
import android.app.FragmentManager;

AND FragmentActivity を拡張しても、FragmentB への参照を作成できません。

@Override
public void respond(int i) {
    // TODO Auto-generated method stub

FragmentManager man = getFragmentManager();
FragmentB b = man.findFragmentById(R.id.fragment2);

}

リクエストに応じて、FragmentB コードを投稿しました。

package com.example.modular_ui;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FragmentB extends Fragment {

TextView text;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    return inflater.inflate(R.layout.fragment_b, container);
}

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        text = (TextView) getActivity().findViewById(R.id.textView1);
    }

メイン XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.modular_ui.MainActivity"
    tools:ignore="MergeRootFrame" >

    <fragment
        android:id="@+id/fragment1"
        android:name="com.example.modular_ui.FragmentA"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <fragment
        android:id="@+id/fragment2"
        android:name="com.example.modular_ui.FragmentB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/fragment1"
        android:layout_marginTop="54dp" />

</RelativeLayout>
4

4 に答える 4

10

getSupportFragmentManager(); を使用するだけです。、サポート ライブラリを正常に追加した後。

于 2014-09-05T13:14:46.840 に答える
7

OP は、 support.v4 を必要とせずに API 11 以降で正常に機能するソリューションを持つことに非常に近かった。

彼はFragmentをimportステートメントで support.v4 も使用しないように変更する必要がありました。

2 つのアプローチの概要。 すべてのアクティビティとフラグメントには、これらのいずれかとまったく同じように見えるコードが必要です。それらを混ぜないでください!(すべてのファイルにすべての行が必要なわけではありません。必要に応じて行を使用してください。)

サポート v4 アプローチ

import android.support.v4.app.FragmentActivity;
import android.support.v4.app.Fragment;      <-- ".support.v4"
import android.support.v4.app.FragmentManager;

... MainActivity extends FragmentActivity ...

... = getSupportFragmentManager();

.... YourFragment extends Fragment ... <-- same in both approaches

API 11+ のアプローチ

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;

... MainActivity extends Activity ...

... = getFragmentManager();

.... YourFragment extends Fragment ... <-- same in both approaches

したがって、上記の 1 つのアプローチを使用して作成されたプロジェクトがあり、他の場所からコードに統合している場合は、これらの行を探して、現在のものと一致するように変更してください。

于 2015-09-21T14:31:00.530 に答える