【发布时间】:2016-01-20 02:04:44
【问题描述】:
我在使用 Butterknife libray 时遇到问题。我在 FragmentSearchAdapter 中有 SearchActivity.class 使用 ViewPager 和 3 个 Fragment:
SearchActivity.class
mAdapter = new FragmentSearchAdapter(getSupportFragmentManager(), SearchActivity.this);
mAdapter.addFragment("search histori");
mAdapter.addFragment("search query");
mAdapter.addFragment("search result");
mPager.setAdapter(mAdapter);
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageSelected(int currentIndex) {
if(currentIndex==2) {
SearchResultFragment SearchResultFragment = (SearchResultFragment) mAdapter.getItem(2);
if (SearchResultFragment != null) {
SearchResultFragment.setDescription("Text 1","Text 2");
}
}
}
public void onPageScrolled(int arg0, float arg1, int arg2) { }
public void onPageScrollStateChanged(int arg0) { }
});
FragmentSearchAdapter.class
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
SearchHistoryFragment search_histori = new SearchHistoryFragment();
return search_histori;
case 1:
SearchQueryFragment search_query = new SearchQueryFragment();
return search_query;
case 2:
SearchResultFragment search_result = new SearchResultFragment();
return search_result;
}
return null;
}
其中一个片段是SearchResultFragment.Class
public class SearchResultFragment extends Fragment {
@Bind(R.id.text1)
TextView text1;
@Bind(R.id.text2)
TextView text2;
private String page_index;
private PageAlquranActivity activity;
public SearchResultFragment() {
}
public static SearchResultFragment newInstance(int page_index) {
SearchResultFragment fragment = new SearchResultFragment();
Bundle args = new Bundle();
args.putString(Variabel.page_index, String.valueOf(page_index));
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
page_index = getArguments().getString(Variabel.page_index);
}
activity = (PageAlquranActivity) getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_search_result, container, false);
ButterKnife.bind(this, v);
return v;
}
public void setDescription(String s1, String s2) {
text1.setText(s1);
text2.setText(s2);
}
@Override
public void onAttach(Context context) {super.onAttach(context);}
@Override
public void onDetach() {
super.onDetach();
}
}
我的问题:当从 SearchActivity 调用方法 SearchResultFragment.setDescription("Text 1","Text 2"); 时,我得到错误:
空对象引用
每个文本视图。如果使用 ButterKnife,则会出现此错误,但如果没有,如果我这样声明 View 就可以了:
text1 = rootView.findViewById(R.id.text1);
text2 = rootView.findViewById(R.id.text2);
在 onCreateView 中。
那么如何解决呢?对不起我的英语不好。谢谢。
【问题讨论】:
-
您是否尝试在
@Bind之前添加@Nullable注释? -
我遇到了类似的问题(页面更改后,某个片段的每个注入视图都变为空)。 你找到解决办法了吗?
标签: android android-fragments butterknife