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

Java 在Android中将数据从活动传递到片段,java,android,bundle,Java,Android,Bundle,我对Java和Android编程非常陌生。我试图弄清楚如何将变量包从一个活动传递到另一个使用setContentView的活动,传递到附加到扩展ListFragment的类的xml文件。基本上,我希望第一个活动中的数据能够被第二个活动中访问的片段访问。到目前为止,我一直在努力研究这个问题,如果答案已经存在,请原谅我 我有一个名为Login.java的活动,它执行以下操作: Intent intent = new Intent(this, ListActivity.class); Bundle v

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

我有一个名为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" />
这可能吗?再次道歉,如果这是一个新手问题,但我还没有找到答案

提前谢谢你。

你可以打电话(从你的片段中)


如果您的片段总是只附加到该活动,那么您可以在活动上创建一个公共方法。然后在片段和活动之间强制执行该关系:

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();

我不确定我是否正确地理解了你,但是由于你的片段在视图中,你能从那里找到它,然后将数据传递给它吗?首先,如果你使用片段,你不应该是列表活动,如果您的目标是SDK>11,则应使用支持库中的
FragmentActivity
,谢谢您的输入。谢谢你给我时间,这就是我要找的。非常感谢。谢谢你的提示。我很感谢您的时间。onAttach(活动)现在已被弃用,请使用onAttach(上下文)
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 */
}
OrderList fragment = (OrderList) getFragmentManager().findFragmentById(R.id.titles);
fragment.whatever();