0

私は新しいAndroidプログラミングです。以前は、私はImageButtonにonClickを実装して、別のアクティビティに行くことができるアクティビティで作業していました。AndroidでImageButtonを使用してフラグメントを連結する

これで同じことをする必要がありますが、フラグメントを使用する必要があります。私は常に画面に表示されるメニューを使ってプロトタイプを作成し、ユーザーにさまざまなアクティビティを表示できます。さまざまな乳酸菌はこの容器の中にあります。

これで、フラグメント内にImageButtonを配置し、次のフラグメントが表示されるようにします。しかし、私はそれを行う方法が混乱しています。

私は、次のコンポーネントがあります。私は、このレイアウト内

  • Activity_main(ジャワ)+(メニュー付き)activity_main.xml
  • Fragment1(javaの)+ fragment1.xml(通常の作業) をImageButtonとはFragment2
  • Fragment2(javaの)+ fragment2.xmlが

どうFragment2を呼び出すことができますしFragment1になります表示したいですか? 答えが新しくなったため、答えが可能な限り明確になることができれば嬉しく思うかもしれません。ありがとう

+0

[docs](https://developer.android.com/training/basics/fragments/communicating.html)で説明されているように、フラグメント間のすべての通信は、アクティビティ – nnesterov

+0

で実行する必要があります。[2つのフラグメント間の基本通信] (http://stackoverflow.com/questions/13700798/basic-communication-between-two-fragments) –

答えて

0

あなたがそれを呼び出すときにフラグメントを常に変更/置換するあなたのアクティビティのメソッドを作るだけです。それが正常に動作しますが、それでもあなたは、ロジックを向上させることができ、単にアイデアです、ので、あなたのフラグメントで

public void updateFragment(Fragment fragment){ 
//add fragment replacing code here 
} 

のようなものは、この

((YourActivity)getActivity()).updateFragment(new YourFragment()); 

のようないくつかのこと、それを呼び出します。

0

実際には、ある断片から別の断片に移動することは、ある活動から別の活動に進むこととほぼ同じです。余分なコードがいくつかあります。 まず、以下のformat-

public class SomeActivity extends SingleFragmentActivity 
{ 
    @Override 
    protected Fragment createFragment() 
    { 
     return SomeFragment.newInstance(); 
    } 
} 

そしてthis-

public class SomeFragment extends Fragment 
{ 
    public static SomeFragment newInstance() 
    { 
     return new SomeFragment(); 
    } 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View v = inflater.inflate(R.layout.fragment_some, container, false); 

     return v; 
    } 
} 
のようなあなたの破片であなたの活動を行い、以下のコード -

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

    @LayoutRes 
    protected int getLayoutResId() 
    { 
     return R.layout.activity_fragment; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(getLayoutResId()); 

     FragmentManager fm = getSupportFragmentManager(); 

     Fragment fragment = fm.findFragmentById(R.id.fragment_container); 

     if (fragment == null) 
     { 
      fragment = createFragment(); 
      fm.beginTransaction().add(R.id.fragment_container, fragment).commit(); 
     } 
    } 
} 

を含んでいるでしょうSingleFragmentActivityという名前の新しいJavaクラスを追加します

この後はすべて、あなたのonCreateView(LayoutInflater, ViewGroup, Bundle) clasである1つの細かいディテールを除いて、アクティビティのコードと同じコードを持ちますs。これはあなたがそれを書く方法です -

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

    mTextView = (TextView)v.findViewById(R.id.some_text); 
    mButton = (Button)v.findViewById(R.id.some_button); 

    mTextView.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      check(); 
     } 
    }); 

    return v; 
} 

それはそれです!

+0

@baldclあなたの質問に実際に回答がなかった場合は、回答にコメントして明確にする –

0

こんにちは、私はあなたが既にその断片とその用途について知っていることを望みますが、ここでも簡単です。それらはアクティビティの子であり、アクティビティには複数のフラグメントがあるため、フラグメントを変更するだけでアクティビティを変更することなくレイアウトを更新できます。

あなたはここで多くのフラグメントで見つけることができます。https://developer.android.com/training/basics/fragments/index.html

戻る元の問題に、あなたがMainActivity.javaであり、あなたはそれでフラグメントをロードするので、あなたは、フラグメント初めてロードするためにこれを行うはず。

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

     transaction.replace(R.id.frame, new Fragment1); 
     transaction.addToBackStack(null); 
     transaction.commit(); 

あなたは別のフラグメントからの断片を変更するには、この方法が必要なので、

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      ((MainActivity)getActivity()).changeFragment(new Fragment2); 

     } 
    }); 

が、それは願っています。このフラグメントでは、ボタンのクリックから今すぐあなたのMainActivityに

public void changeFragment(Fragment fragment){ 
     FragmentTransaction transaction =  getSupportFragmentManager().beginTransaction(); 

     transaction.replace(R.id.frame, new Fragment1); 
     transaction.addToBackStack(null); 
     transaction.commit(); 
    } 

これを追加します助けて!

関連する問題