Android Viewpager라는 캡션이 있는 이미지
-
20-12-2019 - |
문제
저는 Android 프로그래밍이 처음입니다. 이미지가 있는 갤러리가 있고 하나의 이미지를 클릭하면 전체 화면 이미지와 캡션이 있는 ViewPager가 나타나며 전체 갤러리를 슬라이드할 수 있습니다.나는 이 튜토리얼을 따랐다 여기에 링크 설명을 입력하세요 유일한 차이점은 내 이미지가 캡션과 함께 배열에 저장된다는 것입니다.앱을 실행하면 갤러리가 표시되지만 Viewpager는 비어 있고 미끄러지지 않습니다.나는 오류가 없으며 무엇이 잘못되어야하는지 전혀 모릅니다.미리 감사드립니다 :)
FullScreenImageAdapter.java
package com.example.sherlockholmes.images;
import android.app.Activity;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.sherlockholmes.R;
public class FullScreenImageAdapter extends PagerAdapter {
private Activity context;
private LayoutInflater inflater;
private int _position;
private Integer[] mThumbIds;
private String[] description;
public FullScreenImageAdapter(Activity context,Integer[] mThumbIds,String[] description){
this.context=context;
this.mThumbIds = mThumbIds;
this.description = description;
}
@Override
public int getCount() {
return 0;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container,
false);
ImageView imageView = (ImageView) viewLayout.findViewById(R.id.full_image);
TextView textview = (TextView) viewLayout.findViewById(R.id.item_text);
Button btnClose = (Button) viewLayout.findViewById(R.id.btnClose);
imageView.setImageResource(mThumbIds[_position]);
textview.setText(description[_position]);
btnClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.finish();
}
});
((ViewPager) container).addView(viewLayout,0);
return viewLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
}
}
FullScreenViewActivity.java
package com.example.sherlockholmes.images;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import com.example.sherlockholmes.R;
public class FullScreenViewActivity extends Activity{
private FullScreenImageAdapter adapter;
private ViewPager viewPager;
private Integer[] mThumbIds = {
R.drawable.acd1, R.drawable.acd1,
R.drawable.acd1, R.drawable.acd1,
R.drawable.acd1, R.drawable.acd1,
R.drawable.acd1, R.drawable.acd1,
};
private String[] description={
"apple","pinaple","rose","strawberry",
"orange","lemon","potato","banana"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen_view);
viewPager = (ViewPager) findViewById(R.id.pager);
Intent i = getIntent();
int position = i.getIntExtra("position", 0);
adapter = new FullScreenImageAdapter(FullScreenViewActivity.this,mThumbIds,description);
viewPager.setAdapter(adapter);
// displaying selected image first
viewPager.setCurrentItem(position);
}
}
해결책
이 시도
@Override
public int getCount() {
return mThumbIds.length;
}
대신에
@Override
public int getCount() {
return 0;
}
당신의 FullScreenImageAdapter
그리고 이것을 바꾸세요.
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
}
와 함께
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
그리고 이것도 바꿔보세요
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
와 함께
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
업데이트: 너도 이걸 바꿔야 해
imageView.setImageResource(mThumbIds[_position]);
textview.setText(description[_position]);
와 함께
imageView.setImageResource(mThumbIds[position]);
textview.setText(description[position]);
당신의 FullScreenImageAdapter
.. _position을 초기화하지 않았기 때문에 뷰 페이저는 항상 위치 0의 배열에서 이미지와 캡션을 가져옵니다.
제휴하지 않습니다 StackOverflow