배열 어댑터의 데이터로 채워진 목록보기 조각이 있습니다. 목록보기의 각 항목에는 프로필 이미지 (ImageView) 및 설명 (TextView)이 포함됩니다. 리스트 뷰에서 이미지를 누르면 다른 프래그먼트가리스트 뷰 프래그먼트를 대체하고 후기 프래그먼트는 눌려진 이미지가있는리스트 항목에 포함 된 데이터로 채워 져야하는 방식으로하고 싶습니다. 지금까지 내가 한 것은 CustomAdaptor 클래스의 이미지에 대한 클릭 리스너를 구현하여 목록보기에서 클릭 한 항목의 인덱스를 가져 와서 정보를 가져 오는 것입니다. 그러나 이미지 클릭에서 검색된 데이터로 새 조각을 채우지 못합니다.
이것은 내 사용자 정의 어댑터입니다.
public class PostListAdaptor extends ArrayAdapter<Post>{
private Context context;
private ArrayList<Post> posts;
public PostListAdaptor(Context context, ArrayList<Post> objects)
{
super(context, R.layout.item_post, objects);
this.context = context;
this.posts = objects;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.item_post, parent, false);
ImageView profileimage = (ImageView) row.findViewById(R.id.profileimage);
TextView usernametext = (TextView) row.findViewById(R.id.usernametext);
TextView datetext = (TextView) row.findViewById(R.id.datetext);
TextView likestext = (TextView) row.findViewById(R.id.likestext);
ImageView postimage = (ImageView) row.findViewById(R.id.postimage);
TextView posttitletext = (TextView) row.findViewById(R.id.posttitletext);
Picasso.with(context).load(posts.get(position).getImage()).into(postimage);
Picasso.with(context).load(posts.get(position).getUserimage()).into(profileimage);
datetext.setText(posts.get(position).getDate());
usernametext.setText(posts.get(position).getUser());
likestext.setText(Integer.toString(posts.get(position).getLikes()));
posttitletext.setText(posts.get(position).getTitle());
postimage.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
ArrayAdapter<Post> postArrayAdapter;
ArrayList<Post> onepostlist= new ArrayList<Post>();
MainActivity.displayAllPosts=false;
View parentRow = (View) view.getParent();
ListView listView1 = (ListView) parentRow.getParent();
final int position = listView1.getPositionForView(parentRow);
FragmentTransaction ft = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();
FragmentPost post = new FragmentPost();
ft.replace(R.id.fragmentContainer, post);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack("post");
ft.commit();
}
});
return row;
}
우선, custom class의 데이터를 전달할 때마다 해당 클래스를 Parcelable 로 설정하는 것이 좋습니다 (기타 옵션은 Serializable을 사용할 수 있음). 따라서 parcelable 클래스 데이터를 Intent
or Bundle
와 함께 쉽게 첨부하고 다음 활동 또는 조각에서 쉽게 가져올 수 있습니다.
따라서 Post 클래스를 아래와 같이 parcelable로 만드 십시오.
public class Post implements Parcelable {
String date;
String user;
String image;
String userImage;
String likes;
String title;
public Post() {
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getUserImage() {
return userImage;
}
public void setUserImage(String userImage) {
this.userImage = userImage;
}
public String getLikes() {
return likes;
}
public void setLikes(String likes) {
this.likes = likes;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Post(Parcel parcel) {
date = parcel.readString();
user = parcel.readString();
image = parcel.readString();
userImage = parcel.readString();
likes = parcel.readString();
title = parcel.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(date);
parcel.writeString(user);
parcel.writeString(image);
parcel.writeString(userImage);
parcel.writeString(likes);
parcel.writeString(title);
}
public static final Parcelable.Creator<Post> CREATOR = new
Parcelable.Creator<Post>() {
public Post createFromParcel(Parcel in) {
return new Post(in);
}
public Post[] newArray(int size) {
return new Post[size];
}
};
}
이제를 사용하여 Bundle
조각의 추가 / 바꾸기 작업 중에 조각으로 데이터를 보낼 수 있습니다.
onClick
라인 아래 어댑터의 코드 아래에서 변경하십시오 final int position = listView1...
.
//Attach data using Bundle
Bundle postBundle = new Bundle();
postBundle.putParcelable("SELECTED_POST", posts.get(position));
FragmentTransaction ft = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();
FragmentPost post = new FragmentPost();
post.setArguments(postBundle); //Add this line to attach data
ft.replace(R.id.fragmentContainer, post);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack("post");
ft.commit();
그런 다음 onCreate()
아래와 같이 조각 에서 해당 데이터를 포착하고 필요에 따라 사용할 수 있습니다.
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle dataBundle = getArguments();
Post selectedPost = dataBundle.getParcelable("SELECTED_POST");
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다