Как мне установить ImageView, TextViews действия, получая Image, TextViews, которые я загрузил в базу данных Firebase или хранилище? - PullRequest
0 голосов
/ 02 июля 2019

Я создаю новое приложение для Android, которое извлекает одно изображение, два текста, которые были загружены в FireBase с использованием другого приложения или приложения «Администратор», и загруженные изображения и текстовые представления будут извлечены в одно представление карты, как показано на рисунке. Теперь я хочу, чтобы он был похож на любое другое приложение для блога. Так что, когда пользователь нажимает на это представление карты, изображение, заголовок, все эти виды будут расположены в макете по умолчанию, как показано на изображении ниже. Я имею в виду настройку вида изображения для изображения, полученного из firebase, и обоих текстовых представлений для текста, полученного из firebase.Так что, когда любой пользователь щелкает любой пост в блоге, полученный из firebase, он должен открыть макет по умолчанию. и все мнения будут отправлены на свои места объявлено. Как я могу добиться этого ?. Код, который я использовал для извлечения и отображения содержимого в просмотре карты, приведен ниже. Поскольку я новичок в stackoverflow, у меня недостаточно репутации для добавления изображений. Пожалуйста, пройдите по ссылкам на изображения ниже. изображение одно https://ibb.co/kJtvNTm

https://ibb.co/KXB8fdj

Это для моих собственных образовательных целей, я новичок в разработке приложений для Android и Firebase. Я пытался найти их, но не собирается ставить их на место

PostRecyclerActivity.java


    private RecyclerView mRecyclerView;
    private PostImageAdapter mAdapter;

    private ProgressBar mProgressCircle;

    private DatabaseReference mDatabaseRef;
    private List<PostUpload> mUploads;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.post_image_recycler);

        mRecyclerView = findViewById(R.id.post_recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        mProgressCircle = findViewById(R.id.post_progress_circle);

        mUploads = new ArrayList<>();

        mDatabaseRef = FirebaseDatabase.getInstance().getReference("posts");

        mDatabaseRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    PostUpload upload = postSnapshot.getValue(PostUpload.class);
                    mUploads.add(upload);
                }

                mAdapter = new PostImageAdapter(PostImageRecyclerActivity.this, mUploads);

                mRecyclerView.setAdapter(mAdapter);
                mProgressCircle.setVisibility(View.INVISIBLE);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(PostImageRecyclerActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                mProgressCircle.setVisibility(View.INVISIBLE);
            }
        });
    }
}

PostImageAdapter.java

public class PostImageAdapter extends RecyclerView.Adapter<PostImageAdapter.ImageViewHolder> {
    private Context mContext;
    private List<PostUpload> mUploads;

    public PostImageAdapter(Context context, List<PostUpload> uploads) {
        mContext = context;
        mUploads = uploads;
    }

    @Override
    public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.post_card, parent, false);
        return new ImageViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ImageViewHolder holder, int position) {
        PostUpload uploadCurrent = mUploads.get(position);
        holder.textViewName.setText(uploadCurrent.getHeading());
        Picasso.get()
                .load(uploadCurrent.getmImageUrl())
                .fit()
                .centerCrop()
                .into(holder.imageView);
    }

    @Override
    public int getItemCount() {
        return mUploads.size();
    }

    public class ImageViewHolder extends RecyclerView.ViewHolder {
        public TextView textViewName;
        public ImageView imageView;

        public ImageViewHolder(View itemView) {
            super(itemView);

            textViewName = itemView.findViewById(R.id.text_view_name);
            imageView = itemView.findViewById(R.id.post_image_view_upload);
        }
    }
}

PostUpload.java

public class PostUpload {

    private String mHeading;
    private String mMatter;
    private String mImageUrl;

    public PostUpload() {
    }

    public PostUpload(String heading, String matter, String imageUrl) {
        if (heading.trim().equals("")) {

            heading = "No Name";
        }
        mHeading = heading;
        mMatter = matter;
        mImageUrl = imageUrl;

    }

    public String getHeading(){
        return mHeading;
    }
    public void setHeading(String name){
        mHeading=name;
    }
    public String getMatter(){
        return mMatter;
    }
    public void setMatter(String name){
        mMatter=name;
    }
    public String getmImageUrl(){
        return mImageUrl;
    }
    public  void setImageUrl(String imageUrl){
        mImageUrl=imageUrl;
    }
}


Я ожидаю, что после щелчка на посте блога выходные данные должны иметь изображение и заголовок на своих местах, как показано на рисунке два, и вопрос извлекается из базы данных Firebase и устанавливается в другое текстовое представление, как показано на рисунке два.

1 Ответ

0 голосов
/ 02 июля 2019

Когда вы получаете данные из Firebase, вы сохраняете их в своем mUploads массиве типа PostUpload данных, которые вы хотите отобразить в этих CardViews

Здесь

 mDatabaseRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    PostUpload upload = postSnapshot.getValue(PostUpload.class);
                    mUploads.add(upload);
                }

                mAdapter = new PostImageAdapter(PostImageRecyclerActivity.this, mUploads);

                mRecyclerView.setAdapter(mAdapter);
                mProgressCircle.setVisibility(View.INVISIBLE);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(PostImageRecyclerActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                mProgressCircle.setVisibility(View.INVISIBLE);
            }
        });

Когда вы нажмете mRecyclerView.setAdapter(mAdapter);, вы уже заполнили массив и покажете информацию пользователю.

После этого вы можете использовать getItem() из адаптера.

Вам просто нужно переопределить этот метод внутри вашего PostImageAdapter

public PostUpload getItem(int position) {
  return mUploads.get(position);
}

Если у вас есть этот метод, вы можете получить доступ к любому элементу из массива, заполненного из Firebase, в вашем PostRecyclerActivity.java

Такпосле того, как вы щелкнете по элементу в вашем RecyclerView, вы можете получить позицию и получить информацию об объекте из этой позиции

Здесь - множество хороших способов реализовать щелчок каждой строки в представлении реселлера(Я рекомендую первый)

Итак, после того, как вы реализуете щелчок каждой строки в своем обзоре переработчика, просто передайте эти данные через пакет или дополнительные функции другому действию

Псевдокод Пример

recyclerView.onClick{...
  public void recyclerViewListClicked(View v, int position){
    if(mAdapter.getItemCount() > 0){
    PostUpload post = mAdapter.getItem(position);
    }else{
     Toast("There is no data into the element");
    }

 //Go to another Activity
  Intent intent = new Intent(PostRecyclerActivity.this,yourSecondActivity.class);
  intent.putExtra(post.getHeadding,"postheading");
  intent.putExtra(post.getMatter,"postmatter");
  //You keep doing the same with the other data you need to send out.
  startActivity(intent);
}

Как гet данные из Activity2

Intent intent = getIntent();
String postheading = intent.getStringExtra("postheading");
String postmatter = intent.getStringExtra("postmatter");

Так как изображение является URL-адресом типа String, просто передайте его как intent.putExtra(), как мы делали ранее, и вы можете получить этот URL-адрес из другого Activity и накачать вашизображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...