у меня есть это в моем MainActivity.java:Где я должен разместить построитель ShowCaseView в этом случае?
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupHomeScreen();
}
public void setupHomeScreen() {
File latestPic = getMostRecentSnappiePicture();
if(latestPic != null){
//display pic
LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackground(Drawable.createFromPath(latestPic.getAbsolutePath()));
}
else{
layout.setBackgroundDrawable(Drawable.createFromPath(latestPic.getAbsolutePath()));
}
//hide tutorial
findViewById(R.id.howitworks).setVisibility(View.INVISIBLE);
}
else{
//show tutorial
findViewById(R.id.howitworks).setVisibility(View.VISIBLE);
new ShowcaseView.Builder(this)
.setTarget(new ActionViewTarget(this, ActionViewTarget.Type.HOME))
.setContentTitle("ShowcaseView")
.setContentText("This is highlighting the Home button")
.hideOnTouchOutside()
.build();
}
}
}
Как вы можете видеть, в OnCreate, он вызывает setupHomeScreen и проверяет, существует ли файл. Если он не существует, он отображает макет изображения «howitworks» учебника, а также создает витринный вид.
Так что все это прекрасно работает. Единственная проблема возникает, когда вы пытаетесь покинуть эту активность, пока showcaseView все еще существует. Или иногда даже после выхода из витринного представления и попытки запуска нового действия эта ошибка возникает: ShowcaseView - width and height must be > 0
Как вы можете видеть в ответы, решение только создать представление витрины в обратном вызове после первоначального вид был создан следующим образом:
someView.post(new Runnable() {
@Override
public void run() {
// my ShowcaseView builder here
}
});
Единственным, я понятия не имею, куда поместить это, так как с моей точкой зрения витрины должны отображается только в том случае, если файл из getMostRecentSnappiePicture() имеет значение NULL. Итак, как я могу поместить обратный вызов создания представления в мою логику, чтобы проверить, что этот файл имеет значение null первым?