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