我是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);
}
}
这可能吗?如果这是一个菜鸟问题,我再次道歉,但我还没有找到答案。
提前谢谢。
答案 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();