【问题标题】:Why is it the skipping layout in RecyclerView?为什么是 RecyclerView 中的跳过布局?
【发布时间】:2021-02-24 23:59:06
【问题描述】:

我不断收到 E/RecyclerView:未连接适配器;跳过布局。我尝试了 onStop() 和 onStart() 方法。我尝试重新组织方法结构的方式仍然没有运气。我已经按照https://firebaseopensource.com/projects/firebase/firebaseui-android/database/readme/ 上的说明进行操作,但我无法弄清楚。

package mrcof.code.senior_tech_support_app;
        import android.content.Context;
        import android.media.Image;
        import android.os.Bundle;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.view.WindowManager;
        import android.widget.EditText;
        import android.widget.ImageButton;
        import android.widget.ImageView;
        import android.widget.TextView;
        import android.widget.Toast;

        import androidx.annotation.NonNull;
        import androidx.appcompat.app.AppCompatActivity;
        import androidx.recyclerview.widget.LinearLayoutManager;
        import androidx.recyclerview.widget.RecyclerView;

        import com.bumptech.glide.Glide;
        import com.firebase.ui.database.FirebaseRecyclerAdapter;
        import com.firebase.ui.database.FirebaseRecyclerOptions;
        import com.google.firebase.database.DatabaseReference;
        import com.google.firebase.database.FirebaseDatabase;
        import com.google.firebase.database.Query;

    import static mrcof.code.senior_tech_support_app.R.id.result_list;

public class TV extends AppCompatActivity {

private EditText mSearchField;
private ImageButton mSearchBtn;

private RecyclerView mResultList;

private DatabaseReference mUserDatabase;

private FirebaseRecyclerAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_tv);

    mUserDatabase = FirebaseDatabase.getInstance().getReference("TV"); // TV in Database

    mSearchField = (EditText) findViewById(R.id.search_field);
    mSearchBtn = (ImageButton) findViewById(R.id.search_btn);


    mSearchBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String searchText = mSearchField.getText().toString();

            firebaseUserSearch(searchText); //Our own firebase usersearch

        }
    });

}

private void firebaseUserSearch(String searchText) {

    Toast.makeText(TV.this, "Started Search", Toast.LENGTH_LONG).show();

    Query firebaseSearchQuery = mUserDatabase.orderByChild("Brand").startAt(searchText).endAt(searchText + "\uf8ff");
    /*Query firebaseSearchQuery = FirebaseDatabase.getInstance()
            .getReference()
            .child("Brand")
            .limitToLast(6).startAt(searchText).endAt(searchText + "\uf8ff");*/
    FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>().setQuery(firebaseSearchQuery, Users.class).build();

    adapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(options) {
        @NonNull
        @Override
        public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout, parent, false);
            return new UsersViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Users model) {
            holder.setDetails(getApplicationContext(), model.getBrand(), model.getImage());
        }
    };

    mResultList = (RecyclerView) findViewById(result_list);
    mResultList.setHasFixedSize(true);
    mResultList.setLayoutManager(new LinearLayoutManager(this));
    mResultList.setAdapter(adapter);
}


// View Holder Class

public static class UsersViewHolder extends RecyclerView.ViewHolder {

    View mView;

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

        mView = itemView;

    }

    public void setDetails(Context ctx, String brandd, String brandImage){

        TextView brand = (TextView) mView.findViewById(R.id.name_text);
        ImageView brand_image = (ImageView) mView.findViewById(R.id.brandd_image);

        brand.setText(brandd);

        Glide.with(ctx).load(brandImage).into(brand_image);


    }

}

}

【问题讨论】:

  • 显示 logcat 和错误行。
  • 别担心,伙计。我自己解决问题。

标签: java android firebase-realtime-database firebaseui


【解决方案1】:
package mrcof.code.senior_tech_support_app;
import android.annotation.SuppressLint;
import android.content.Context;
import android.media.Image;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;

import static mrcof.code.senior_tech_support_app.R.id.result_list;

public class TV extends AppCompatActivity {

    private EditText mSearchField;
    private ImageButton mSearchBtn;
    private RecyclerView recyclerView;
    private DatabaseReference databaseReference;
    private FirebaseRecyclerAdapter adapter;
    private FirebaseDatabase database;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_tv);

        //databaseReference = FirebaseDatabase.getInstance().getReference("TV"); // TV in Database

        mSearchField = (EditText) findViewById(R.id.search_field);
        mSearchBtn = (ImageButton) findViewById(R.id.search_btn);

        recyclerView = (RecyclerView) findViewById(result_list);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        databaseReference = FirebaseDatabase.getInstance().getReference("TV"); // TV in Database

        mSearchBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String searchText = mSearchField.getText().toString();

                firebaseSearch(searchText);

            }
        });

    }


    private void firebaseSearch(String searched){
        String query = searched;
        Query firebaseSearchQuery = databaseReference.orderByChild("brand").startAt(query).endAt( query + "\uf8ff");

        FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>().setQuery(firebaseSearchQuery, Users.class).setLifecycleOwner(this).build();

        FirebaseRecyclerAdapter<Users, ViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, ViewHolder>(options) {
            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout, parent, false);
                return new ViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull Users model) {
                holder.setDetails(getApplicationContext(), model.getBrand(), model.getImage());
            }
        };

        firebaseRecyclerAdapter.startListening();
        recyclerView.setAdapter(firebaseRecyclerAdapter);
    }

    @Override
    protected void onStart() {
        super.onStart();

        FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>().setQuery(databaseReference, Users.class).setLifecycleOwner(this).build();

        FirebaseRecyclerAdapter<Users, ViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, ViewHolder>(options) {
            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout, parent, false);
                return new ViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull Users model) {
                holder.setDetails(getApplicationContext(), model.getBrand(), model.getImage());
            }
        };

        firebaseRecyclerAdapter.startListening();
        recyclerView.setAdapter(firebaseRecyclerAdapter);
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        View mView;

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

            mView = itemView;

        }

        public void setDetails(Context ctx, String brandd, String brandImage){

            TextView brand = (TextView) mView.findViewById(R.id.brand_name);
            ImageView brand_img = (ImageView) mView.findViewById(R.id.brand_image);

            brand.setText(brandd);

            Glide.with(ctx).load(brandImage).into(brand_img);


        }

    }

}

【讨论】:

  • 只是粘贴一堆代码对任何人都没有帮助。指出问题并仅添加您已修复的代码。
猜你喜欢
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
相关资源
最近更新 更多