У меня есть две активности, первое действие - экран Spla sh, который исчезает через 4 с, перед тем как появится второе действие, черный экран появляется на несколько секунд. Я использую https://newsapi.org/ для загрузки данных во второе действие. Поскольку загрузка данных занимает так много времени, пока запрос не возвращается с сервера, черный экран остается спереди, и как только у меня есть данные, заполняется второе действие с пользовательским интерфейсом.
Я использую AsyncTask для этой загрузки данных в фоновом режиме. Но все еще сталкиваюсь с проблемой черного экрана, я не хочу, чтобы этот черный экран появлялся при переключении между виды деятельности. Я попытался использовать индикатор выполнения как в onCreate деятельности, связанной с фрагментом, так и во фрагменте, но черный экран все еще появляется.
Spla sh Экран появляется в течение 4 с
Черный экран между двумя действиями
Второе действие после данных загружено
SPLA SH КОД ДЕЯТЕЛЬНОСТИ
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
imageView.animate().rotationBy(720).setDuration(3000);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(MainActivity.this, homepage.class );
startActivity(i);
finish();
}
},4000);
}
}
ФРАГМЕНТ
public class FragmentRecentNews extends Fragment {
View view;
private List<RecentNews> recentNewsList;
NewsRepo newsRepo;
public FragmentRecentNews() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//recentNews
newsRepo= new NewsRepo();
recentNewsList = newsRepo.GetTopHeadlines("https://newsapi.org/v2/top-headlines?country=au&apiKey=b4fcfc3bfc9c4a8380a83a02b3d0cfc7");
view = inflater.inflate(R.layout.recentnews_fragment,container,false);
RecyclerView recyclerView = view.findViewById(R.id.recyclerViewid);
RecycleViewAdapter adapter = new RecycleViewAdapter(getActivity(),recentNewsList);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
recyclerView.setAdapter(adapter);
return view;
}
}
ВТОРАЯ ДЕЯТЕЛЬНОСТЬ
public class homepage extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;
private List<RecentNews> recentNewsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_homepage);
//settanlayout
tabLayout = findViewById(R.id.tablayoutid);
viewPager = findViewById(R.id.viewpagerid);
ViewPageAdapter viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager());
viewPageAdapter.AddFragment(new FragmentRecentNews(),"Recent News");
viewPageAdapter.AddFragment(new FragmentNewsSources(),"Sources");
viewPageAdapter.AddFragment(new FragmentCountries(),"Countries");
viewPager.setAdapter(viewPageAdapter);
tabLayout.setupWithViewPager(viewPager);
//Drawer naviagtion
mDrawerLayout = findViewById(R.id.drwaerlayoutid);
mToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.string.open,R.string.close);
mDrawerLayout.addDrawerListener(mToggle);
mToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (mToggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
}
RECYCLERVIEWADAPTER
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.MyViewHolder>
{
private FragmentActivity mContext;
private List<RecentNews> mData;
private Context context;
public RecycleViewAdapter(FragmentActivity mContext, List<RecentNews> mData) {
this.mContext = mContext;
this.mData = mData;
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
LayoutInflater mInflater = LayoutInflater.from(mContext);
view= mInflater.inflate(R.layout.card_recentnews,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.title.setText(mData.get(position).getTitle());
holder.source.setText(mData.get(position).getSourceName());
// holder.author.setText(mData.get(position).getAuthor());
holder.date.setText(mData.get(position).getPublishedAt());
//holder.image.setImageResource(mData.get(position).getUrlToImage());
Picasso.with(mContext).load(mData.get(position).getUrlToImage()).into(holder.image);
holder.image.setClipToOutline(true);
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = mContext.getSupportFragmentManager();
Intent intent = new Intent(mContext, newsdetails.class);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mData.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
TextView title;
TextView source;
// TextView author;
TextView date;
ImageView image;
Button button;
public MyViewHolder(@NonNull View itemView)
{
super(itemView);
title = (TextView) itemView.findViewById(R.id.titletextview);
source = itemView.findViewById(R.id.sourcetextview);
// author = itemView.findViewById(R.id.authortextview);
date = itemView.findViewById(R.id.datetextview);
image = itemView.findViewById(R.id.newsimageview);
button = itemView.findViewById(R.id.detailsbtn);
}
}
}
Макет главной страницы
<androidx.drawerlayout.widget.DrawerLayout android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drwaerlayoutid"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".homepage">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:src="@drawable/bg"
android:background="@color/colorPrimary">
</ImageView>
<ImageView
android:id="@+id/icon"
android:layout_width="92dp"
android:layout_height="73dp"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:src="@drawable/logon"></ImageView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/appdesc"
android:textColor="#ffff"
android:layout_below="@+id/heading"
android:paddingTop="0dp"
android:textSize="18dp"
/>
<TextView
android:layout_below="@+id/icon"
android:id="@+id/heading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-black"
android:gravity="center"
android:text="Awais World News"
android:textColor="#ffffff"
android:textSize="30dp"
android:textStyle="bold">
</TextView>
</RelativeLayout>
<com.google.android.material.tabs.TabLayout
android:layout_width="match_parent"
android:layout_height="60dp"
app:tabGravity="fill"
app:tabMode="fixed"
android:id="@+id/tablayoutid"
android:background="@color/colorPrimaryDark"
app:tabTextColor="#fff"
app:tabIndicatorColor="#FFB300"
app:tabIndicatorHeight="4dp"
/>
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewpagerid"/>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:menu="@menu/menu"
android:layout_gravity="start">
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
Стили. XML
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>