Man*_*jaj 2 java android nullpointerexception android-fragments android-viewpager
所以基本上我有两个碎片 - FragmentConverter而且FragmentFavourites,我有一个MainActivity.我正在尝试使用名为的接口将第一个片段中的4个数组传递给第二个数组Communicator.具体片段如下所示:
public interface Communicator {
public void respond(String[] names, String[] codes, String[] symbols, int[] images);
}
Run Code Online (Sandbox Code Playgroud)
这是一个方法FragmentFavourites:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
String[] checkedNames = new String[counter];
String[] checkedCodes = new String[counter];
String[] checkedSymbols = new String[counter];
int[] checkedImages = new int[counter];
comm = (Communicator) getActivity();
int index = 0;
if (item.getItemId() == R.id.action_save){
for (int i=0;i<checked.size();i++){
if (checked.get(i) == true){
checkedNames[index] = names[i];
checkedCodes[index] = codes[i];
checkedSymbols[index] = symbols[i];
checkedImages[index] = images[i];
index++;
}
}
comm.respond(checkedNames, checkedCodes, checkedSymbols, checkedImages);
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
这是内部实现的接口方法MainActivity:
@Override
public void respond(String[] names, String[] codes, String[] symbols,
int[] images) {
// TODO Auto-generated method stub
FragmentConverter frag = (FragmentConverter) fragmentPagerAdapter.getItem(1);
frag.changeData(names, codes, symbols, images);
}
Run Code Online (Sandbox Code Playgroud)
这是一种收集数据的方法FragmentConverter:
public void changeData(String[] names, String[] codes, String[] symbols, int[] images){
this.names = names;
this.codes = codes;
this.symbols = symbols;
this.images = images;
Log.d("TEST", symbols.length + names.length + codes.length + images.length + "");
tvOneRate.setText(names[1]);
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,每当我尝试更改内部的ui组件时FragmentConverter,我会得到一个NullPointerException,尽管Log.d语句返回正确的结果.
EDIT1:FragmentPagerAdapter的getItem()方法:
@Override
public Fragment getItem(int i) {
// TODO Auto-generated method stub
Fragment frag = null;
if (i == 0){
frag = new FragmentFavourites();
}
if (i == 1){
frag = new FragmentConverter();
}
return frag;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
当您调用时,fragmentPagerAdapter.getItem(1)您正在获取片段的新实例,因此您指的是另一个对象.这就是为什么视图为null并且你得到NullPointerException.如果你只需要2个片段的适配器,你可以试试这样的东西:
public class YourPagerAdapter extends android.support.v4.app.FragmentPagerAdapter {
private FragmentFavourites mFragFavourites;
private FragmentConverter mFragConverter;
public YourPagerAdapter() {
// ... your code above
this.mFragFavourites = new FragmentFavourites();
this.mFragConverter = new FragmentConverter();
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return mFragFavourites;
case 1:
return mFragConverter;
default:
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7328 次 |
| 最近记录: |