2017-10-05 9 views
0

FragmentTextViewにユーザーが接触すると、それを表示する必要があります。ここで私が持っているものです。別のフラグメントのonTouch()内のフラグメントをどのように置き換えることができますか?

public class FindPeopleHelpFragment extends Fragment { 

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

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

     ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(R.string.find_people_help); 

     TextView welcome_home = (TextView) view.findViewById(R.id.find_people_help); 
     welcome_home.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent evt) { 
       if (evt.getAction() == MotionEvent.ACTION_DOWN) { 
        EditProfileFragment editProfileFragment = new EditProfileFragment(); 
        FragmentManager manager = getActivity().getSupportFragmentManager(); 
        manager.beginTransaction().replace(R.id.fragment_container, editProfileFragment, editProfileFragment.getTag()).commit(); 
       } 
       return true; 
      } 
     }); 

     // Inflate the layout for this fragment 
     return view; 
    } 
} 

問題はonTouch()booleanを返しますが、Fragmentを交換する際、私はViewを返す必要があるということです。それ以外の場合、私は次のようになります。

10-05 15:00:51.057 25152-25152/wegrok.chiaramail.com E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: wegrok.chiaramail.com, PID: 25152 
                     java.lang.IllegalArgumentException: No view found for id 0x7f0f00b1 (wegrok.chiaramail.com:id/fragment_container) for fragment FindPeopleHelpFragment{c052157 #1 id=0x7f0f00b1} 

これに対処する方法はありますか?

答えて

0

Fragment取引をActivityから行う必要があります。は、FragmentをホストするActivityには、のTextViewがクリックされたときに、のパブリックメソッドが呼び出され、Fragmentが切り替わるように、フラグメント切り替えを処理するパブリック関数が必要です。

だから、これはActivityのように思うかもしれません。あなたのFragment1から今

public class YourActivity extends AppCompatActivity { 

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

     // The Fragment 1 will be loaded by default 
     switchToFragment1(); 
    } 

    public void switchToFragment1() { 
     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.fragment_container, new Fragment1()).commit(); 
    } 

    public void switchToFragment2() { 
     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.fragment_container, new Fragment2()).commit(); 
    } 
} 

、あなたはTextViewがクリックされたときにように、TextViewにしてFragment2Fragment1スイッチのonClickリスナを実装する必要があります。

textView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ((YourActivity) getActivity()).switchToFragment2(); 
    } 
});) 

+0

助けてくれて嬉しいです。 –

関連する問題