如何从另一片段的onTouch()内部替换片段?

问题描述:

我需要当用户触摸的另一个FragmentTextView的以显示Fragment。下面是我有:如何从另一片段的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} 

任何人都知道如何处理这个?

您需要从Activity使这些Fragment交易。承载FragmentActivity应具有用于处理分段切换的公共功能,以便当您单击Fragment1TextView时,将调用Activity的公共方法来创建Fragment切换。

所以,你可能会考虑接受Activity这样。

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

现在从您的Fragment1,你需要到TextView实现一个onClick监听器,这样当点击TextView时,Fragment1切换到Fragment2

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

希望有帮助。

+0

很高兴知道这有帮助。 –