2016-01-21 68 views
0

我有关于片段相互更新值的问题。Android片段正在等待另一片段的数据

我有一个叫做UserFragment的片段,另一个叫CarsFragment。 UserFragment获取用户数据,carFragment获取用户拥有的多辆汽车。然后我需要保存这个。

所以,首先,在userFragment中,我将获得用户详细信息。然后,在我想保存细节之前,我需要知道在保存用户数据之前是否已经填充/提供了汽车细节。一旦提供,我可以保存它。

public class UserFragemnt extends Fragment { 


     private EditText mUserName; 
     private EditText mUserOccupation; 
     private String [] muserCars = null; 

     ...//onCreate 
     mUserName= (EditText) view.findViewById(R.id.UserName) 
     mUserOccupation= (EditText) view.findViewById(R.id.UserOccupation) 

     if (userCar != null){ //so here i want to be sure the data is set by the carFragment 
      //call saveUserdata() 
     } 

     //this function gets called by the main activity 
     public void getUserCarsString [] userCars){ 
      muserCars = userCars; 
     } 
} 

所以,问题是,什么是对的carFrament最好的方式让我/套的数据,所以,当我去保存它,我的数据?所以在这个问题中需要注意的一点是,userFragment需要在保存之前等待数据。

我已阅读有关界面,然后在主要活动中进行定义。我做了这样的条件检查,看看汽车的细节是否更新。我不认为这是最好的方式。我跟着这个例子:http://developer.android.com/training/basics/fragments/communicating.html

还简要地了解数据绑定变量:http://developer.android.com/tools/data-binding/guide.html

感谢

回答

0

将您的碎片附加到活动时,请确保为它们分配自己的唯一标签。

getSupportFragmentManager() 
    .beginTransaction() 
    .add(R.id.content, new CarsFragment(), "CARS") 
    .commit(); 

一旦你有他们,你可以使用引用从其他的一个片段:

CarsFragment cars = (CarsFragment) getFragmentManager().findFragmentByTag("CARS"); 

现在,您可以暴露你的CarsFragment一些额外的方法,将返回你所需要的UserFragment内的任何信息 - 像getSelectedUserCar()。您稍后可以使用该方法的结果来决定是否要继续保存用户的数据。

+0

好的,所以在这种情况下,我不需要实现一个正确的接口?我只是将它称为UserFragment的另一个功能吧?但是一旦我知道数据在那里,有没有办法调用。就像告诉UserFragment CarFragment有数据的事件一样?此外,我认为这种方式可能与@迈克尔Liberman回答正确。 –

+0

你不需要,它会在没有它的情况下工作,但通常是一个很好的习惯来提取这样的接口。他们让你的碎片彼此分离,并导致更好的架构。 –

+0

还有一个问题,.add()中的内容ID是什么? –

0

这并不完全回答你的问题,但可以假设您的片段之间实现通信。你真的想让你的碎片互相依赖吗?我不知道应用程序的确切用户体验,但我更喜欢每个片段存储自己的数据和其他片段(如果他们需要查询此数据)将加载此数据并依赖它。这种方式片段不关心它依赖的数据如何被填充,如果你需要删除或添加更多的片段,你将有最小的变化(你不会保持特定片段之间的通信)。

+0

有道理,但他们如何知道要查询的数据?在我的例子中UserFragment需要知道哪辆车与哪辆车相关联。所以当查询汽车集时,他们需要将其连接到某个用户。所以他们中的一个需要通过一个ID如何? –

+0

在你的情况下,用户唯一身份证将是我认为的不错选择。要在UserFragment中显示相关的用户数据,应该使用一些唯一的用户标识创建它,查询一些持久数据(共享prefs,db,文件或您正在使用的任何内容)并显示它。任何更改将保存回同一地点。根据您的应用程序/游戏,可以使用相同的唯一用户ID创建CarFragment,以加载用户特定和其他汽车以供选择并保存选择。这样,这两个片段都可以在一些存储器上工作,而且不会相互依赖。 – MikeL

+0

您可以自由更改您选择汽车或编辑用户数据的方式,并且更改CarsFragment名称不会影响UserFragment类。 – MikeL

相关问题