这是我学习Android应用程序的第三天。目前正在使用android studio,我的问题与ViewPager类有关。下面是我的fragment和viewPager类的代码。
ViewPager和适配器类:
包com.syedabdullah.syed.quran_memorization_application;
import android.content.pm.ActivityInfo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.Window;
公共类ViewPagerActivity扩展FragmentActivity {
ViewPager myPager; PagerAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Remove Title bar this.requestWindowFeature(Window.FEATURE_NO_TITLE); //force portrait orientation. (No landscape orientation). setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setContentView(R.layout.activity_view_pager); myPager = (ViewPager) findViewById(R.id.pager); myAdapter = new adapterClass(getSupportFragmentManager()); myPager.setAdapter(myAdapter); } /* @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_view_pager, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } */ /*Nested class needed for custom Adapter */ private class adapterClass extends FragmentStatePagerAdapter { int[] images = new int[3]; images[0] = R.drawable._2; String extract = "R.drawable._"; public adapterClass(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { //initialiseArray(images); return viewPageFragment.newInstance(position, images[position]); } @Override public int getCount() { return images.length; } private int[] initialiseArray(int[] array) { for (int i = 2; i <= array.length + 1; i++) { extract += i; array[i-2] = Integer.parseInt(extract); } return array; } }
}
片段类:
包com.syedabdullah.syed.quran_memorization_application;
/ ** * 2014年12月25日由syed创建。 * /
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView;
/ ** *包含简单视图的占位符片段。 * /
public class viewPageFragment extends Fragment {
public viewPageFragment() { } public static viewPageFragment newInstance(int position, int imageId) { viewPageFragment myFrag = new viewPageFragment(); Bundle myBundle = new Bundle(); myBundle.putInt("imagePosition", position); myBundle.putInt("imageId", imageId); myFrag.setArguments(myBundle); return myFrag; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_view_pager, container, false); int imageId = getArguments().getInt("imageId"); ImageView myImageView = (ImageView) rootView.findViewById(R.id.imageView); myImageView.setImageResource(imageId); return rootView; } }
目前我的initialiseArray
不起作用。如果我按如下方式初始化我的数组:
int[] images = {R.drawable._2, R.drawable._3, R.drawable._4};
它会在我的ViewPager中显示适当的图像。但是,我有超过500张图像,如果我这样做,它将需要永远。这就是为什么我想知道是否有更简单的方法来插入这些图像。我的所有图像都按递增顺序命名。所以我的第一张图片被命名为._2一直到._550或其他东西。
还有一个问题。如果我们可以制作一个类似的数组
int [] images = {R.drawable._2,R.drawable._3,R.drawable._4};
那为什么这不起作用?
int [] images = new int [3]; images [0] = R.drawable._2;
有人可以解释一下吗?谢谢。
我想出了一种有效地向ViewPager添加大量页面的方法。只是向可能面临类似问题的任何其他新人发布答案。我试图做的是在应用程序内存中添加数百个图像,效率非常低。它的假设是你必须下载图像(使用AsynTask或DownloadManger)并将它们存储在外部存储器上,然后从那里你可以提取图像。希望这可以帮助。