由于我目前正在处理一个带解析的应用程序,我希望有一个用户列表,如果您点击其中一个名称,则会使用其个人资料启动新活动。启动a活动时,会将parse对象的objectId发送到具有intent的活动。这是我的问题:我希望活动的标题是用户名。我找到了一个解决方案,但有点奇怪。也许有人有更好的解决方案?
这是我的代码(工作正常,但我必须设置标题两次,否则它不起作用):
public class UserProfileActivity extends AppCompatActivity {
String userId;
String username;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile);
final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
userId = getIntent().getStringExtra("userId");
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("objectId", userId);
query.setLimit(1);
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
if (objects.size() != 0) {
for (ParseUser user : objects) {
Log.i("AppInfo", user.getUsername());
getSupportActionBar().setTitle(user.getUsername());
username = user.getUsername();
}
}
}
}
});
getSupportActionBar().setTitle(username);
}
}
答案 0 :(得分:2)
您无需设置两次。
查询完成后,username
将在done方法中可用。循环外的setTitle
行不起作用。移除setTitle
后的findInBackground
。
请参阅此代码。
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("objectId", userId);
query.setLimit(1);
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
if (objects.size() != 0) {
for (ParseUser user : objects) {
Log.i("AppInfo", user.getUsername());
username = user.getUsername();
// adding some null checks
if(null != getSupportActionBar() && username != null && !username.equals("")){
getSupportActionBar().setTitle(username);
}
}
}
}
}
});
getSupportActionBar().setTitle(username); // remove this line
答案 1 :(得分:-1)
您正在async
使用parse
来电。当进行该调用时,下一行(即设置title
)立即运行。那时username
变量包含null
。
在解析查询的完成回调中,您将再次设置标题。实际上这是为你工作的实际路线。
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
if (objects.size() != 0) {
for (ParseUser user : objects) {
Log.i("AppInfo", user.getUsername());
getSupportActionBar().setTitle(user.getUsername());
username = user.getUsername();
}
}
}
}
});
您可以在通话后删除此行getSupportActionBar().setTitle(username);
,代码也会一样,但只需设置一次标题即可设置磁贴。