Android 更改listfragment内容

Android 更改listfragment内容,android,android-fragments,Android,Android Fragments,我使用listfragment并尝试更改它的内容。这是我的活动代码: public class MainActivity extends Activity { public static Context appContext; public ToFragment ToFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save

我使用listfragment并尝试更改它的内容。这是我的活动代码:

public class MainActivity extends Activity {
    public static Context appContext;
    public ToFragment ToFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.activity_main);
        ActionBar actionbar = getActionBar();
        actionbar.setDisplayShowTitleEnabled(false);
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.Tab FromTab = actionbar.newTab().setText("FromFragment");
        ActionBar.Tab ToTab = actionbar.newTab().setText("ToFragment");

        FromFragment FromFragment = new FromFragment();
        ToFragment ToFragment = new ToFragment();

        ToTab.setTabListener(new MyTabsListener(ToFragment));
        FromTab.setTabListener(new MyTabsListener(FromFragment));

//        ListView tolistview = ToFragment.getListView();
//        ListView fromlistview = FromFragment.getListView();

        actionbar.addTab(ToTab);
        actionbar.addTab(FromTab);
    }

      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.mainmenu, menu);
        return true;
      }

      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.action_refresh:
            String[] countries = new String[] {
                    "Russia",
                    "USA",
                };  
            ToFragment.changeContent(countries);
          break;
        case R.id.action_settings:

          break;

        default:
          break;
        }

        return true;
      }
}
这里我初始化了两个ListFragment,ToFragment和FromFragment。然后在这里(onCreateOptions菜单),我尝试通过我的函数changeContent来更改片段的内容。以下是片段的代码:

public class ToFragment extends ListFragment {
    String[] countries = new String[] {
            "India",
            "Pakistan",
        };
    private LayoutInflater inflater;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        this.inflater = inflater;
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(inflater.getContext(), android.R.layout.simple_list_item_1, countries);

        setListAdapter(adapter);

        return super.onCreateView(inflater, container, savedInstanceState);
    }

    public void changeContent(String[] array) {
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(inflater.getContext(), android.R.layout.simple_list_item_1, array);
        setListAdapter(adapter);
    }

更改创建
ArrayAdapter
实例的方式:

ArrayList<String> arrayList = new ArrayList<String>();
arrayList.addAll(Arrays.asList(countries));

ArrayAdapter<String> adapter = new ArrayAdapter<String>(inflater.getContext(), android.R.layout.simple_list_item_1, arrayList);
ArrayList ArrayList=new ArrayList();
addAll(Arrays.asList(countries));
ArrayAdapter=新的ArrayAdapter(inflater.getContext(),android.R.layout.simple\u list\u item\u 1,arrayList);
从这个答案中可以看出:

public void changeContent(字符串[]数组){
ArrayAdapter=(ArrayAdapter)getListAdapter();
if(适配器!=null){
适配器。清除();
adapter.addAll(Arrays.asList(array));
adapter.notifyDataSetChanged();
}
}

您不需要每次都重新创建适配器。只需清除并设置新数组,然后通知适配器数据集已更改,以便更新视图。

是的,我确定适配器==null。如何获取它?您可以发布堆栈跟踪(将其添加到您的问题中)吗?似乎在SetListAdapter之前调用了
changeContent
,这很奇怪。使用适配器空检查尝试更新代码。我这样做了。但如何确保适配器已创建?我的意思是,即使使用空检查,我应该等待多长时间?即使在
changeContent()
中检查
if(adapter==ull)
,您仍然会得到空引用?
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.addAll(Arrays.asList(countries));

ArrayAdapter<String> adapter = new ArrayAdapter<String>(inflater.getContext(), android.R.layout.simple_list_item_1, arrayList);
public void changeContent(String[] array) {
    ArrayAdapter<String> adapter = (ArrayAdapter<String>)getListAdapter();
    if (adapter != null) {
        adapter.clear();
        adapter.addAll(Arrays.asList(array));
        adapter.notifyDataSetChanged();
    }
}