2013-06-20 47 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