한 페이지에있는 뷰 페이지와 함께 수행해야하는 활동은 EditText 여야하고 다른 페이지는 TextView 여야합니다. 첫 번째 조각에서 데이터를 가져 와서 두 번째보기로 표시해야하지만ViewPager에서 조각상의 데이터를 다른 사람에게 전달할 수 없습니다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return EditFragment.newInstance("FirstFragment, Instance 1");
case 1: {
Log.e("TAG", " is " + new EditFragment().getTag());
return PreviewFragment.newInstance(new EditFragment().getTag());
}
default: return EditFragment.newInstance("ThirdFragment, Default");
}
}
@Override
public int getCount() {
return 2;
}
}
}
메인 레이아웃이
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewpager"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
EditFragment 같이 지식의 부족, 나는 주요 활동이다가
public class EditFragment extends Fragment {
public EditFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_editor, container, false);
EditText tv = (EditText) v.findViewById(R.id.content);
tv.setText(getArguments().getString("msg"));
return v;
}
public static EditFragment newInstance(String text) {
EditFragment f = new EditFragment();
Bundle b = new Bundle();
b.putString("msg", text);
f.setArguments(b);
return f;
}
}
PreviewFragment이
public class PreviewFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_markdown, container, false);
TextView tvView = (TextView) v.findViewById(R.id.markdownView);
tvView.loadMarkdown(getArguments().getString("msg"));
return v;
}
public static PreviewFragment newInstance(String text) {
PreviewFragment f = new PreviewFragment();
Bundle b = new Bundle();
b.putString("msg", text);
f.setArguments(b);
return f;
}
}
내가 PreviewFragment에 EditFragment에서 데이터를 전달하는 방법을 모르겠어요, 도와주세요.
나는 파편에 새내기를 도와주세요.
UPDATE는
나는
public class PreviewFragment extends Fragment {
private TextView textView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_markdown, container, false);
textView = (TextView) v.findViewById(R.id.title);// initialized here
return v;
}
public void b_updateText(String t){
Log.e("LOAD TXT", t);// Here I can get data Data is available
textView.setText(t); // but Here I get NPE, don't know why.
}
}
을 변경하지만, 여기에 이유를 모르겠어, NPE를 얻을.
및 EditFragment는
public class EditFragment extends Fragment {
public EditFragment(){}
private static Bundle bundle = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_editor, container, false);
final EditText tv = (EditText) v.findViewById(R.id.content);
final PsgerActivity mainActivity = (PsgerActivity) getActivity();
mainActivity.message= tv.getText().toString();
tv.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
bundle = new Bundle();
bundle.putString("md", tv.getText().toString());
Log.e("BUNDLE", bundle.getString("md"));// Data is available
}
@Override
public void afterTextChanged(Editable editable) {
}
});
return v;
}
public static EditFragment newInstance() {
EditFragment f = new EditFragment();
f.setArguments(bundle);
return f;
}
}
MainActivity가
public class MainActivity extends AppCompatActivity {
public String message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (position == 1) {
PreviewFragment fragmentB = new PreviewFragment();
EditFragment ef = EditFragment.newInstance();
try{
Log.e("ACTIVITY", ef.getArguments().getString("md"));// Data is available
} catch (Exception e){
e.printStackTrace();
}
fragmentB.b_updateText(ef.getArguments().getString("md"));
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return EditFragment.newInstance();
case 1: return new PreviewFragment();
default: return EditFragment.newInstance();
}
}
@Override
public int getCount() {
return 2;
}
}
}
하지만 여기에 내가 왜 모르는, NPE를 얻을 수있다.
조각을 사용하여 통신하는 인터페이스에 대해 읽으십시오. –
하지만 viewpager를 사용하여 디스플레이 및 편집 옵션을 나란히 사용하는 이유는 무엇입니까? 이 구현의 실제 목적은 무엇입니까? –
스 와이프하여 조각을 바꿀 때 데이터를 전송 하시겠습니까? –