我已经用尽了所有的搜索。本质上,我想要完成的是将FragmentActivity中的字符串传递给ListFragment。以下是我的代码:
MyActivity.java
package com.application.smst.smstapp;
import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.app.ProgressDialog;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.text.util.Linkify;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.support.v4.widget.SwipeRefreshLayout;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import com.application.smst.smstapp.adapter.TabsPagerAdapter;
public class MyActivity extends FragmentActivity implements ActionBar.TabListener {
private ViewPager viewPager;
private ActionBar actionBar;
// Tab titles
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
// Initilization
String[] tabs = { "LOA", "OT", "My "+getIntent().getExtras().getString("result_mover") };
////////////////////////////////////////////////////
String message = getIntent().getExtras().getString("result_mover");
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
////////////////////////////////////////////////////
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
TabsPagerAdapter 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(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
}
我尝试传递的变量是消息字符串
String message = getIntent().getExtras().getString("result_mover");
数据已成功从另一个活动传递。但是现在我必须把它放到我的listfragment中,它是上面片段活动包含的三个标签(片段)之一。以下是listfragment代码:
schfragment.java
package com.application.smst.smstapp;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by Admin on 10/5/2014.
*/
public class schfragment extends ListFragment {
String[] menuweekday;
String[] menudate;
String[] menustart;
String[] menuend;
CustomAdapter adapter;
private List<RowItem> rowItems;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){
////////////////////////////////////////
return inflater.inflate(R.layout.fragment_sch, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
menuweekday = getResources().getStringArray(R.array.weekdays);
menudate = getResources().getStringArray(R.array.dates);
menustart = getResources().getStringArray(R.array.starts);
menuend = getResources().getStringArray(R.array.ends);
rowItems = new ArrayList<RowItem>();
for (int i = 0; i< menuweekday.length;i++){
RowItem items = new RowItem(menuweekday[i],menudate[i],menustart[i],menuend[i]);
rowItems.add(items);
}
adapter = new CustomAdapter(getActivity(),rowItems);
setListAdapter(adapter);
}
}
对此的任何帮助都将非常感激。
我尝试过使用Bundles,这会导致NPE。我不知道在哪里正确放置代码
提前谢谢你。如果我需要发布我的tabspager适配器
,请告诉我答案 0 :(得分:0)
我不知道这是否会有任何帮助,因为你已经尝试过捆绑,但我会发布我的工作代码。 这是我的片段中使用的一些代码:
private static final String KEY_RESULT = "result";
public static MyFragment newInstance(String result) {
MyFragment myFragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString(KEY_RESULT, result);
myFragment.setArguments(bundle);
return myFragment;
}
当您需要传递给片段的String时,您可以使用以下代码:
String result = this.getArguments().getString(KEY_RESULT, "");
最后,这是我用来创建片段的代码。我在我的活动中这样做,但您也可以在适配器中执行此操作。只要你在那里有String'结果'。
List<Fragment> fragments = new ArrayList<Fragment>();
fragments.add(MyFragment.newInstance(result));