从数据库中检索链接以在 Firebase 回收器视图中启动浏览器



在Firebase RecyclerView中,我有一个按钮,它有一个onclicklistener。该onClicklistner包含打开浏览器的意图。那么我如何从数据库中更改该链接呢?我成功检索图像,标题,描述。和按钮也支持。启动浏览器。但我只是不知道如何检索该按钮的链接。

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.database.DataSnapshot;
    import com.google.firebase.database.DatabaseError;
    import com.google.firebase.database.DatabaseReference;
    import com.google.firebase.database.FirebaseDatabase;
    import com.google.firebase.database.ValueEventListener;
    import com.squareup.picasso.Picasso;
    public class BlankFragment extends Fragment {

        private static final String TAG = "Blank Fragment Startd";
        private View frag1View;
        private RecyclerView recyclerView;
        private DatabaseReference myref;
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            frag1View = inflater.inflate(R.layout.fragment_blank, container, false);
            FirebaseApp.initializeApp(getContext());
            recyclerView = (RecyclerView) frag1View.findViewById(R.id.recyclerview);
            recyclerView.setHasFixedSize(true);
            myref = FirebaseDatabase.getInstance().getReference().child("holly");
            recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

            return frag1View;
        }

        @Override
        public void onStart() {
            super.onStart();
            FirebaseRecyclerAdapter<Blog, BlogViewHolder> recyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
                    Blog.class,
                    R.layout.individual_row,
                    BlogViewHolder.class,
                    myref
            ) {
                @Override
                //populateViewHolder metod sets all Element which Our Main Componets Contain.
                protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {
                    //it gets tittle frm model class and setting it to the viewHolder, same as below
                    viewHolder.setTitle(model.getTitle());
                    viewHolder.setDescription(model.getDescription());
                    viewHolder.setImage(model.getImage());
                    viewHolder.mbtn.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            myref = FirebaseDatabase.getInstance().getReference().child("link");
                            // Read from the database
                            myref.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
                                    // This method is called once with the initial value and again
                                    // whenever data at this location is updated.
                                    String link = dataSnapshot.getValue(String.class);
                                    Toast.makeText(getActivity(), "please wait.... Brouser is Opening", Toast.LENGTH_SHORT).show();
                                    Intent btn = new Intent(
                                            Intent.ACTION_VIEW);
                                    btn.setData(Uri.parse(link));
                                    startActivity(btn);
                                    Log.d(TAG, "Value is: " + link);
                                }
                                @Override
                                public void onCancelled(DatabaseError error) {
                                    // Failed to read value
                                    Log.w(TAG, "Failed to read value.", error.toException());
                                }
                            });

                        }
                    });

                }
            };
            //here Adapter is Setting the recyclerView
            recyclerView.setAdapter(recyclerAdapter);
        }

        //this Is the BlogViewHolder
        public static class BlogViewHolder extends RecyclerView.ViewHolder {
            View mView;
            //dowloding Button reffernce for Setonclicklistrner.
            Button mbtn;
            String link;
            //here Reference to all the Elements it Contain
            TextView textView_title;
            TextView textView_decription;
            ImageView imageView;
            public BlogViewHolder(View itemView) {
                super(itemView);
                mView = itemView;
                String link;
                mbtn = (Button) mView.findViewById(R.id.btn);
                textView_title = (TextView) itemView.findViewById(R.id.title);
                textView_decription = (TextView) itemView.findViewById(R.id.description);
                imageView = (ImageView) itemView.findViewById(R.id.image);
            }
            public void setTitle(String title) {
                textView_title.setText(title);
            }
            public void setDescription(String description) {
                textView_decription.setText(description);
            }
            public void setImage(String image) {
                Picasso.with(mView.getContext())
                        .load(image)
                        .into(imageView);
            }
        }

    }

要解决此问题,您需要在BlogViewHolder类中设置单击侦听器,而不是在 populateViewHolder() 方法中设置。假设模型类中有一个包含要打开的链接的文件,如果您希望在用户单击标题时打开浏览器,请使用以下代码:

textView_title.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(getActivity(), "please wait.... Brouser is Opening", Toast.LENGTH_SHORT).show();
        Intent btn = new Intent(Intent.ACTION_VIEW);
        btn.setData(Uri.parse(link));
        startActivity(btn);
        Log.d(TAG, "Value is: " + link);
    }
});

最新更新