Android 更改listfragment内容
我使用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
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();
}
}