我已經開始使用Android Studio和不久前學習Java,現在在適配器適用於differen ViewPager時已經停滯不前。我自己沒有足夠的知識來解決這些組件的行爲問題,並會很感激您的幫助。 (對不起,我的英語)FragmentPagerAdapter到ViewPager
的理念是:
1)記錄的列(如在Instagram的),它可以滾動上下;
2)每條記錄都有圖像塊,可以左右滾動,文本塊;
它是如何組織的(見截圖也):
1)(main.xml中)在主佈局(ConstraintLayout)有nestedScrollView,其中包括我的LinearLayout(records.xml)。這是記錄列。
2)LinearLayout被循環中的記錄填充(record.xml)。每條記錄都是ConstraintLayout,其中包含ViewPager和TextView。
3)在每個新添加的記錄中,我試圖找到ViewPager,我使用setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager()))將適配器設置爲它。
4)MyFragmentPagerAdapter當來到getItem時調用RecordImageFragment.newInstance,創建新的片段(RecordImageFragment.java)。
5)每個RecordImageFragment放置FrameLayout(record_images_pager.xml),在其中找到ImageView,並在其中放置圖片。
截圖:
的問題是:
所有的作品,但圖片僅見於第一條記錄。 創建記錄時,我還在其中找到TextView(record.xml)併爲其設置文本。文本與要記錄的記錄不同(這很好),但只有第一個記錄中的第一個ViewPager有圖片。儘管適配器(MyFragmentPagerAdapter)適用於每個ViewPager,但OnPageChangeListener調用追蹤位置:0-2。經過研究發現,RecordImageFragment認爲第一條記錄是他的ViewGroup.getRootView()。getRootView()(不是適配器設置的記錄)。直到現在我試圖弄清楚爲什麼片段(RecordImageFragment.java)的內容(record_images_pager.xml)不是添加到ViewPager中,而是添加到適配器設置的ViewPager中,而是添加到第一個。
MainActivity.java
package example;
import android.os.*;
import android.support.v4.app.*;
import android.support.v4.view.*;
import android.support.v7.app.AppCompatActivity;
import android.util.*;
import android.view.*;
import android.widget.*;
public class MainActivity extends AppCompatActivity {
\t @Override
protected void onCreate(Bundle savedInstanceState)
\t {
\t \t super.onCreate(savedInstanceState);
\t \t setContentView(R.layout.main);
\t \t addRecords();
\t }
\t
\t public void addRecords()
\t {
\t \t for (int j = 1; j <= 10; j++ )
\t \t {
\t \t \t addNewRecord(j);
\t \t }
\t }
\t public void addNewRecord(int id)
\t {
\t \t LinearLayout records = (LinearLayout) findViewById(R.id.records);
\t \t // Add new record
\t \t LayoutInflater inflater = getLayoutInflater();
\t \t View record = inflater.inflate(R.layout.record, null, false);
\t \t records.addView(record);
\t \t // Set text to text field
\t \t TextView title_tv = (TextView) record.findViewById(R.id.title);
\t \t title_tv.setText("Запись " + id);
\t \t //Find ViewPager, add adapter and page change listener
\t \t ViewPager pager = (ViewPager) record.findViewById(R.id.pager);
\t \t pager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager()));
\t \t pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
\t \t {
\t \t \t @Override
\t \t \t public void onPageSelected(int position) { Log.d("example", "Картинка сменилась на: " + position);}
\t \t \t @Override
\t \t \t public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
\t \t \t @Override
\t \t \t public void onPageScrollStateChanged(int state) {}
\t \t });
\t }
\t
\t private class MyFragmentPagerAdapter extends FragmentPagerAdapter
\t {
\t \t int[] internalPicts = {R.drawable.pict1, R.drawable.pict2, R.drawable.pict3};
\t \t public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); }
\t \t @Override
\t \t public Fragment getItem(int pos) { return RecordImageFragment.newInstance(internalPicts[pos]); }
\t \t @Override
\t \t public int getCount() {
\t \t \t return internalPicts.length;
\t \t }
\t }
}
RecordImageFragment。java的
package example;
import android.os.Bundle;
import android.support.v4.content.*;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class RecordImageFragment extends android.support.v4.app.Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layoutWithImage = inflater.inflate(R.layout.record_images_pager, container, false);
\t \t //Find ImageView on layout and place drawable there
\t \t ImageView image = (ImageView) layoutWithImage.findViewById(R.id.image);
\t \t int imgId = getArguments().getInt("img");
\t \t image.setImageDrawable(ContextCompat.getDrawable(getActivity(), imgId));
\t return layoutWithImage;
}
public static RecordImageFragment newInstance(int image) {
\t \t RecordImageFragment f = new RecordImageFragment();
Bundle b = new Bundle();
b.putInt("img", image);
\t \t f.setArguments(b);
return f;
}
}