조각 모음을 표시하기 위해 ViewPager를 사용하는 조각 활동이 있습니다. 프래그먼트 작업에는 클릭 할 때 현재 프래그먼트로 메시지를 보내어 내용을 새로 고침합니다. 프래그먼트의 뷰를 새로 고칠 수 없다는 것을 제외하고는 모든 것이 정상적으로 작동합니다 (현재/현재 프래그먼트 통신). 이 함수는 null을 반환하므로 getView()로 현재 뷰에 액세스 할 수 없습니다. 조각이 생성 된 후 (ViewCreated에서 호출 될 때) getView가 삭제 된 것 같습니다. 내가 여기서 뭔가를 놓치고 있니? 프래그먼트로 내용을 프로그래밍 방식으로 다시 그리게 만드는 방법은? 이것이 작동하는 유일한 방법은 단편이 상위 활동에서 작성된 경우입니다. 이렇게하려면 조각을 다시 제거하고 다시 추가해야합니까? 여기 버튼을 클릭 할 때 조각보기 새로 고침
코드이다주요 활동
public class MainActivity extends FragmentActivity {
private MyAdapter mAdapter;
private static ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViewPager();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_test:
updateFragment();
return true;
default: return true;
}
}
private void updateFragment() {
for (int i=0; i< mAdapter.getCount(); i++) {
SampleFragment fragment = (SampleFragment) mAdapter.getItem(i);
fragment.update();
}
}
private void setupViewPager() {
try {
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(this.mAdapter);
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
SampleFragment fragment = new SampleFragment(position);
return fragment;
}
@Override
public int getCount() {
return 5;
}
}
}
및 프래그먼트 분류 :
public class SampleFragment extends Fragment{
private int myPosition = -1;
public SampleFragment(int position) {
this.myPosition = position;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
update(view, "Updated from onCreateView");
return view;
}
@Override
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.textTitle).setOnClickListener(myClickListener);
}
private OnClickListener myClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.textTitle:
break;
}
}
};
public void update() {
update(getView(), "Updated from main");
}
private void update(View view, String subtitleText) {
TextView title = (TextView) view.findViewById(R.id.textTitle);
TextView subtitle = (TextView) view.findViewById(R.id.textSubtitle);
title.setText("Fragment " + myPosition);
subtitle.setText(subtitleText);
}
}
오류라고 view.FindViewById (뷰가 null)에서 발생 주 활동의 메뉴 항목에서
조각에서 수정하려는 레이아웃의 뷰를 캡처하거나 저장할 수 있습니까? 예 : TextView mTitle = (TextView) findById (R.id.title); 그런 다음 나중에보기의 텍스트를 편집하십시오. –
벌써 시도했지만 레이아웃을 업데이트해야 할 때 null로 판명되었습니다. – user501223
무슨 일이 일어나는지 설명하는 데 도움이되는 몇 가지 코드를 게시 할 수 있습니까? –