Я хочу знать, что, как я могу использовать URL для установки фона определенного вида. Примерно так:
TextView someview;
someview.setbackground(url).
Предположим, я получаю этот URL из базы данных Firebase через метод получения в моем классе моделей.
Может ли кто-нибудь помочь мне ясно понять это ...
На самом деле я пытаюсь загрузить статус пользователя с созданного мной узла Firebase. Ниже приведен весь код и объяснение: проблема в классе адаптера, и я прокомментировал там, пожалуйста, проверьте ...
Узел, который я хочу получить из firebase:
Класс модели для этого узла:
пакет com.example.sociapp;
public class Status {
String backgrounduri, date, fullname, profileimage, e, time, uid, userstatus;
long textcolor, textsize;
public Status ( )
{
}
public Status(String backgrounduri, String date, String fullname, String profileimage, long textcolor, long textsize, String time, String uid, String userstatus)
{
this.backgrounduri = backgrounduri;
this.date = date;
this.fullname = fullname;
this.profileimage = profileimage;
this.textcolor = textcolor;
this.textsize = textsize;
this.time = time;
this.uid = uid;
this.userstatus = userstatus;
}
public String getBackgrounduri() {
return backgrounduri;
}
public void setBackgrounduri(String backgrounduri) {
this.backgrounduri = backgrounduri;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getProfileimage() {
return profileimage;
}
public void setProfileimage(String profileimage) {
this.profileimage = profileimage;
}
public long getTextcolor() {
return textcolor;
}
public void setTextcolor(long textcolor) {
this.textcolor = textcolor;
}
public long getTextsize() {
return textsize;
}
public void setTextsize(long textsize) {
this.textsize = textsize;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUserstatus() {
return userstatus;
}
public void setUserstatus(String userstatus) {
this.userstatus = userstatus;
}
}
Ниже приведен класс адаптера:
public class StatusAdapter extends RecyclerView.Adapter<StatusAdapter.viewHolder> {
java.util.List<String> statuskeyList;
List<Status> SList;
Context context;
DatabaseReference ClickstatusRef;
FirebaseAuth mAuth;
public StatusAdapter(List<String> statuskeyList, List<Status> SList, Context context)
{
this.statuskeyList = statuskeyList;
this.SList = SList;
this.context = context;
}
@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.all_user_status_layout, parent, false);
return new viewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull viewHolder holder, int position) {
Status status = SList.get(position);
String statusKey = statuskeyList.get(position);
mAuth = FirebaseAuth.getInstance();
final String CurrentUserId = mAuth.getCurrentUser().getUid();
Picasso.get().load(status.getProfileimage()).placeholder(R.drawable.profile).into(holder.Profileimage);
holder.FullName.setText(status.getFullname());
holder.Date.setText(status.getDate());
holder.Time.setText(status.getTime());
holder.UserStatus.setText(status.getUserstatus());
ClickstatusRef = FirebaseDatabase.getInstance().getReference().child("Status").child(statusKey);
/* String name = status.getBackgrounduri();
int id = context.getResources().getIdentifier(name, "drawable", context.getPackageName());
Drawable drawable = context.getResources().getDrawable(id);*/
try {
int status_background = Integer.parseInt(status.getBackgrounduri());
holder.UserStatus.setBackgroundResource(status_background);
}
catch (NumberFormatException e)
{
e.printStackTrace();
}
//I tried all the code for setting background commented and not commented but no use
// Проблема здесь, и здесь я устанавливаю фоновый URL, который я получаю от firebase. Я перепробовал весь код, который вы видите здесь, с комментариями, но никто не прокомментировал // holder.UserStatus.setBackground(context.getResources().getDrawable(context.getResources().getIdentifier("SociApp", "getBackground",context.getPackageName())));
int status_color = (int) status.getTextcolor();
holder.UserStatus.setTextColor(status_color);
int Text_Size = (int) status.getTextsize()/ 3 ;
holder.UserStatus.setTextSize(Text_Size);
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClickstatusRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
String statusUserId = dataSnapshot.child("uid").getValue().toString();
if (statusUserId.equals(CurrentUserId))
{
View mview = LayoutInflater.from(context).inflate(R.layout.dialog_layout, null);
TextView Message = mview.findViewById(R.id.dialog_text);
Button OkBtn = mview.findViewById(R.id.dialog_btn);
AlertDialog.Builder mbuilder = new AlertDialog.Builder(context, R.style.mydialog);
mbuilder.setView(mview);
String message = "Do you want to delete your status!";
Message.setText(message);
OkBtn.setText("Do it");
OkBtn.setWidth(100);
final Dialog dialog = mbuilder.create();
dialog.show();
OkBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ClickstatusRef.removeValue();
dialog.dismiss();
SendUserToLoadstatusActivity();
}
});
}
else
{
Toast.makeText(context, "You just long clicked the status", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return true;
}
});
}
private void SendUserToLoadstatusActivity()
{
Intent MainIntent = new Intent(context, LoadStatusActivity.class);
MainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(MainIntent);
}
@Override
public int getItemCount()
{
return SList.size();
}
public class viewHolder extends RecyclerView.ViewHolder{
private CircleImageView Profileimage;
private TextView FullName;
private TextView Date,Time;
private TextView UserStatus;
public viewHolder(@NonNull View itemView)
{
super(itemView);
Profileimage = itemView.findViewById(R.id.status_profile_image);
FullName = itemView.findViewById(R.id.status_user_name);
Date = itemView.findViewById(R.id.status_date);
Time = itemView.findViewById(R.id.status_time);
UserStatus = itemView.findViewById(R.id.all_user_status);
}
}
}
Ниже я передаю данные массивам из LoadStatusActivity:
public class LoadStatusActivity extends AppCompatActivity {
private Toolbar mtoolbar;
private TextView UserStatusButton;
private RecyclerView StatusList;
private ProgressBar ProgressCircular;
private DatabaseReference StatusRef;
private FirebaseAuth mAuth;
private List<Status> mUserStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load_status);
mtoolbar = findViewById(R.id.status_page_toolbar);
setSupportActionBar(mtoolbar);
mAuth = FirebaseAuth.getInstance();
StatusList = (RecyclerView) findViewById(R.id.all_users_status_list);
ProgressCircular = (ProgressBar) findViewById(R.id.status_progress_circular);
StatusRef = FirebaseDatabase.getInstance().getReference().child("Status");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle("Status");
UserStatusButton = findViewById(R.id.status_post_btn);
mUserStatus = new ArrayList();
final List<String> Keys = new ArrayList<>();
StatusList.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
StatusList.setLayoutManager(linearLayoutManager);
UserStatusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SendUserToStatusPostActivity( );
}
});
Query sortStatusInDescendantOrder = StatusRef.orderByChild("counter");
sortStatusInDescendantOrder.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mUserStatus.clear();
if (dataSnapshot.exists()) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
Keys.add(dataSnapshot1.getKey());
Status status = dataSnapshot1.getValue(Status.class);
mUserStatus.add(status);
}
StatusAdapter statusAdapter = new StatusAdapter( Keys, mUserStatus, LoadStatusActivity.this);
StatusList.setAdapter(statusAdapter);
ProgressCircular.setVisibility(View.INVISIBLE);
} else {
Toast.makeText(LoadStatusActivity.this, "There is no post Exists! " + DatabaseError.PERMISSION_DENIED, Toast.LENGTH_SHORT).show();
ProgressCircular.setVisibility(View.INVISIBLE);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void SendUserToStatusPostActivity() {
Intent StatusPostIntent = new Intent(LoadStatusActivity.this, StatusPostActivity.class);
startActivity(StatusPostIntent);
}
}
Вывод, который я получаю:
но я хочу текст с фоном, а не только текст. И этот фон URL сохраняется в backgrounduri , как показано на первом рисунке вверху. как его загрузить.