将数据从活动传递到Android中的片段

时间:2013-06-20 15:59:35

标签: java android bundle

我是Java和Android编程的新手。我试图弄清楚如何将一个变量包从一个活动传递到另一个使用setContentView的Activity到附加到扩展ListFragment的类的xml文件。基本上,我希望第一个活动的数据能够被第二个活动中访问的Fragment访问。到目前为止,我一直在努力研究这个,所以如果答案已经存在,请原谅我。

我有一个名为Login.java的活动,它执行以下操作:

Intent intent = new Intent(this, ListActivity.class);
Bundle varBundle = new Bundle();
varBundle.putString("companyKey",companyKey);
varBundle.putString("techID",techID);
varBundle.putString("userID",userID);       
varBundle.putString("startDate",startDate);
intent.putExtras(varBundle);
startActivity(intent);

在ListActivity.java中,到目前为止我有这个:

public class ListActivity extends Activity 
{
public String companyKey;
public String techID;
public String userID;
public String startDate;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    Bundle vars = getIntent().getExtras();

    companyKey = vars.getString("companyKey");
    techID = vars.getString("techID");
    userID = vars.getString("userID");
    startDate = vars.getString("startDate");

    setContentView(R.layout.fragmentlist);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.list, menu);
    return true;
}

}

我将内容视图设置为fragmentlist.xml:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/titles"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.example.technicianappointmentlist.OrderList" />

Fragmentlist.xml与OrderList.java绑定。这是我希望能够访问传递给ListActivity.java的包中的数据的地方。

public class OrderList extends ListFragment
{
//THIS IS WHERE I WANT TO ACCESS THE VARIABLES PASSED INTO ListActivity.java    
public OrderList() 
{
    super();
    // TODO Auto-generated constructor stub
}


@SuppressWarnings({ })
@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

}
}

这可能吗?如果这是一个菜鸟问题,我再次道歉,但我还没有找到答案。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以致电(从您的片段中)

String companyKey = ((ListActivity)getActivity()).companyKey;
String techId = ((ListActivity)getActivity()).techId;
String userId = ((ListActivity)getActivity()).userId;
String startDate = ((ListActivity)getActivity()).startDate;

答案 1 :(得分:1)

如果您的片段始终只附加到该Activity,则可以在Activity上创建公共方法。然后只强制片段和活动之间的关系:

public class OrderList extends ListFragment {
    private MyListActivity activity;

    @Override
    public void onAttach(Activity activity) {
        if (!(activity instanceof MyListActivity)) {
            throw new IllegalStateException("must be attached to an instance of MyListActivity!");
        }
        this.activity = activity;
    }

    /* elsewhere you can call public methods defined in MyListActivity */
}

如果这种耦合太紧,你可以改造界面,让活动实现那个界面。

你也可以用其他方式做事。使用FragmentManager从活动中找到片段,检查它是否是OrderList的实例,并在其上调用公共方法:

OrderList fragment = (OrderList) getFragmentManager().findFragmentById(R.id.titles);
fragment.whatever();