2013-06-20 45 views
2

我对Java和Android编程非常新颖。我想弄清楚如何从一个活动通过另一个Activity使用setContentView传递一个变量包到附加到扩展ListFragment的类的xml文件。基本上,我希望第一个活动的数据能够被第二个活动中访问的Fragment访问。我一直在试图研究这一点,所以请原谅我,如果答案已经存在这里。将数据从活动传递到Android中的片段

我有一个名为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

林不知道做了我给你正确的,但你的片段是在视图中,可以只需从那里找到它,然后将数据传递给它? – user902383

+0

首先你'ListActivity'不应该是一个列表活动,如果你正在使用的片段,它应该只是和'活动',如果你是针对SDK> 11如果不是,那么你使用'FragmentActivity'从支持库 – tyczj

+0

谢谢你的输入。我很欣赏时间。 –

回答

1

您可以拨打电话(从片段中)

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

这就是我一直在寻找的。非常感谢。 –

1

如果您的片段总是只将被附加到活动,可以使您的活动的公共方法。然后,只需执行片段和活动之间的关系:

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

感谢您的提示。我很欣赏时间。 –

+1

onAttach(Activity)现在已被弃用,使用onAttach(上下文) – Bamerza