将字符串从FragmentActivity传递给ListFragment

时间:2014-10-20 01:19:19

标签: android android-fragments nullpointerexception

我已经用尽了所有的搜索。本质上,我想要完成的是将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适配器

,请告诉我

1 个答案:

答案 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));