Java 将数据从活动传递到swipeable视图片段
好的,我对android编程还不熟悉,这是我的问题。我有一个异步任务,它根据httpget请求从服务器收集json数据,并在可切换视图中更新listview片段。我想要一种将数据(一组字符串)从主TabActivity类发送到Tab1Fragment类的方法 我已经尽了最大努力将代码剥离到最基本的部分 注意:我尝试过在其他类似问题中读到的bundle方法,但它们最终都在片段中抛出空指针异常,这意味着bundle没有被发送。(?) 这是我的主要选项卡活动:Java 将数据从活动传递到swipeable视图片段,java,android,listview,android-fragments,tabs,Java,Android,Listview,Android Fragments,Tabs,好的,我对android编程还不熟悉,这是我的问题。我有一个异步任务,它根据httpget请求从服务器收集json数据,并在可切换视图中更新listview片段。我想要一种将数据(一组字符串)从主TabActivity类发送到Tab1Fragment类的方法 我已经尽了最大努力将代码剥离到最基本的部分 注意:我尝试过在其他类似问题中读到的bundle方法,但它们最终都在片段中抛出空指针异常,这意味着bundle没有被发送。(?) 这是我的主要选项卡活动: TabActivity.java pu
TabActivity.java
public class TabActivity extends ActionBarActivity implements ActionBar.TabListener {
private String phoneno;
private static String url = "http://my/url/forjson";
//JSON Node Names
private static final String TAG_OPERATOR = "operator";
private static final String TAG_REGNO = "Reg No";
public String operator;
public String regNo;
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Details", "Others"};
Bundle bundle = new Bundle();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
Intent intent = getIntent();
phoneno = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
new JSONParse().execute();
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getSupportActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
/*Private Class to parse JSON*/
private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(TabActivity.this);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@SuppressWarnings("finally")
@Override
protected JSONObject doInBackground(String... args) {
//*
JSONParser jParser = new JSONParser();
// Getting JSON from URL
StringBuilder finalUrl = new StringBuilder();
JSONObject jsonForData = new JSONObject();
try{
finalUrl.append(url);
jsonForData = jParser.getJSONFromUrl(finalUrl.toString());
}catch (JSONException e) {
e.printStackTrace();
}
return jsonForData;
}
@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
try {
Bundle bundle=new Bundle();
bundle.putString("oper", json.getString(TAG_OPERATOR));
bundle.putString("regNo", json.getString(TAG_REGNO));
mAdapter.getData(bundle);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
我可以看到,您已经成功地通过捆绑包传递了数据。请把这个拿走。从下面的代码:
this.bundle.putString("operator", "hi");
fragment.setArguments(this.bundle);
更改它,因为不需要以这种方式访问它:
bundle.putString("operator", "hi");
fragment.setArguments(bundle);
在Tab1Fragment.java上,您可以尝试以下操作:
if(getArguments()!=null){
String sentString = getArguments().getString("operator");
}
看看这里哦,哇。好吧这在通过适配器发送数据时起作用。但是如何将数据从TabActivity类获取到adapter类呢?因为我目前有一个单独的适配器类。非法参数-请查看我发布的新代码。它还是坏的:(仍然提供空值。是的,很抱歉我在测试它。问题是,当我从适配器发送数据时,我可以传递数据。但是异步任务中的数据不可用。异步任务数据准备得不够快,无法在适配器中访问。它仍然抛出空指针异常。@Ra41P然后您可以尝试在的onpostexecute上获取参数值。@Ra41PasynctaskOK,当我把它放在片段的onResume()中时,它就工作了。因此它会定期更新。这样它就能够获取数据。我绕过了适配器的使用。@Ra41P如果我的代码对你有用,请接受我的答案
bundle.putString("operator", "hi");
fragment.setArguments(bundle);
if(getArguments()!=null){
String sentString = getArguments().getString("operator");
}