在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);
}
}
}
答案 0 :(得分:0)
要解决此问题,您需要在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);
}
});