2016-05-05 20 views
1

これは間違った質問です。私は私の問題への答えを探しましたが、私はこの問題のいくつかの言及を見つけましたが、提案された解決策のどれもが私の問題を解決しませんでした。 私のアプリケーションでは、フラグメントからアクティビティを呼び出しています。そのアクティビティのボタンをクリックすると、そのフラグメントに戻りたいと思っています。 1 - フラグメントDiscover_FragmentでIは、リストビューを有し、一つの項目が押下されると、アクティビティEditThoughtsが開始:フラグメントからアクティビティを呼び出す

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
            int position, long arg3) { 
       Intent intent1 = new Intent(getActivity(), EditThought.class); 
       startActivity(intent1); 
      } 
     }); 

活性EditThoughtsは問題なく開始されます。 2 - その後、私は活動EditThoughtからフラグメント(Discover_Fragment)に戻したいとき、私は次のようにします。

    FragmentManager fragmentManager = getSupportFragmentManager(); 
        Discover_Fragment fragmentS1 = new Discover_Fragment(); 
        fragmentManager.beginTransaction() 
          .replace(R.id.containerView, fragmentS1) 
          .commit(); 

私はエラーを取得する:

java.lang.IllegalArgumentException: No view found for id 0x7f0e006e (com.appleia.vocapp:id/containerView) for fragment Discover_Fragment{f1e7d01 #0 id=0x7f0e006e} 

R.id.containerViewですactivity_main中でframeLayout用ID:

 <FrameLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/containerView"> 
     </FrameLayout> 

Discover_Fragmentのレイアウトは、次のとおり

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

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/toplayout" 
    android:orientation="horizontal" 

    > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:id="@+id/topButtons" 
     android:gravity="center" 
     android:layout_weight="1"> 


     <com.appleia.SegmentedButtons.SegmentedRadioGroup 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dip" 
      android:orientation="horizontal" 
      android:id="@+id/segment_text" 
      android:checkedButton="@+id/button_one" 
      android:gravity="center"> 
      <RadioButton android:id="@id/button_one" 
       android:layout_height="wrap_content" 
       android:layout_width="110dp" 
       android:minWidth="110dp" 
       android:minHeight="33dip" 
       android:text="@string/Articles" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:button="@null" 
       android:gravity="center" 
       android:textColor="@drawable/radio_colors" /> 
      <RadioButton android:id="@+id/button_two" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:minWidth="0dp" 
       android:minHeight="33dip" 
       android:text="Two" 
       android:button="@null" 
       android:gravity="center" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:textColor="@drawable/radio_colors" 
       android:visibility="gone"/> 
      <RadioButton android:id="@+id/button_three" 
       android:layout_height="wrap_content" 
       android:layout_width="110dp" 
       android:minWidth="110dp" 
       android:minHeight="33dip" 
       android:text="@string/Toughts" 
       android:button="@null" 
       android:gravity="center" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:textColor="@drawable/radio_colors" /> 
     </com.appleia.SegmentedButtons.SegmentedRadioGroup> 

    </LinearLayout> 

</LinearLayout> 
<ListView 
    android:layout_below="@+id/toplayout" 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 
</ListView> 

</RelativeLayout> 

私は間違っていますか? ありがとうございます。

答えて

1

することはできstartActivityを使用し動作します。 その後、onBackPressedを使用してアクティビティに戻ることができます。アクティビティにデータを戻したい場合は、setResult (int resultCode, Intent data)を使用します。 More information is here

あなたが戻っActivityクラスにデータを取得したい場合、あなたはgetActivity().startActivityForResult (Intent intent, int requestCode)

を呼び出す必要がありますまたはあなたが戻っフラグメントクラス自体にデータを取得する必要がある場合だけstartActivityForResult (Intent intent, int requestCode)を使用することに注意してください。そのフラグメント内のonActivityResultに戻ります。

+0

アレックス、ありがとう。 startActivityFroResultを試しましたが、onBackPressedの実装方法はわかりません。そこにどのようなコードを追加する必要がありますか? – user3079872

+0

'onBackPressed'は、戻るボタンを押すと自動的に呼び出されます。それを手動で行い、バックボタンを押さないようにするには、 'super.onBackPressed();あなたが欲しいときはいつでも。 –

+0

聞いてよかったです。ハッピーコーディング;) –

0

が...このようaddToBackStackため

FragmentManager fragmentManager = getSupportFragmentManager(); 
        Discover_Fragment fragmentS1 = new Discover_Fragment(); 
        fragmentManager.beginTransaction() 
          .replace(R.id.containerView, fragmentS1).addToBackStack("fragBack"); 
          .commit(); 

説明を行います - バックスタックにこのトランザクションを追加します。これは、トランザクションがコミットされた後に記憶され、後でスタックからポップされるときにその動作を戻すことを意味します。コードの

+0

お返事ありがとうございます。あなたの提案を試してみて、私はまったく同じエラーになる...私は断片からアクティビティを呼び出す方法を変更する必要がありますか?おかげさまで – user3079872

0
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
           int position, long arg3) { 
      Intent intent1 = new Intent(getActivity(), EditThought.class); 
      getActivity().startActivity(intent1); 
     } 
    }); 

これらの行は正しくので、startActivityForResult (Intent intent, int requestCode)docs hereを呼び出して

+0

ありがとうございます。私はまだまったく同じエラーが発生します... – user3079872

0

あなたがエラーを取得する理由:助け

As Alex Chengalan told, you have to just call onBackPressed() method instead of above code. And there you go!

希望:

when you want to return to the Fragment (Discover_Fragment) from Activity EditThought, you used the following:

   FragmentManager fragmentManager = getSupportFragmentManager(); 
       Discover_Fragment fragmentS1 = new Discover_Fragment(); 
       fragmentManager.beginTransaction() 
         .replace(R.id.containerView, fragmentS1) 
         .commit(); 

Here, in above your code, have a look at R.id.containerView , which is not from your current activity(EditThought Activity).

は、のは、解決策を見てみましょう!

+0

ありがとうございます。はい、問題はコンテナビューがEditThoughtアクティビティにないということでしたが、私は本当に呼び出し元のフラグメントに戻る方法を知りませんでした。私はonBackPressed()のための "スーパー"部分を忘れていましたが、それを扱うのは扱いのように機能します。問題の内容を説明していただきありがとうございます。 – user3079872

+0

ようこそ。 – Meet

関連する問題