Ich bin ein junger Android-Entwickler und ich habe es geschafft, ein RecyclerView zusammenzustellen. Verwenden von Volley zum Parsen von JSON-Daten, die Blogposts enthalten, und Verwenden von CardViews zum Ausfüllen des RecyclerView; Ich erhalte den Fehler "Kein Adapter angeschlossen; Layout überspringen", wenn ich ihn auf meinem Gerät starte."RecyclerView: Kein Adapter angeschlossen; Layout überspringen "für Recyclerview
Bitte beachten Sie, ich habe diese Frage recyclerview No adapter attached; skipping layout überprüft, aber es hat nicht geholfen.
Dieser Teil des MainActivity.java
//Creating Views
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initializing Views
recyclerView = (RecyclerView) findViewById(R.id.post_recycler);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
//Adding adapter to recyclerview
recyclerView.setAdapter(adapter);
ich diesen alse versucht haben: MainActivity.java
//Creating Views
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initializing Views
recyclerView = (RecyclerView) findViewById(R.id.post_recycler);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initializing Views
recyclerView = (RecyclerView) findViewById(R.id.post_recycler);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
//Initializing the postlist list
mPostItemsList = new ArrayList<>();
//Caling method to get data
getData();
//This method will get data from the web api
private void getData(){
//Showing progress dialog
final ProgressDialog progressDialog = ProgressDialog.show(this, "Loading posts", "Please wait", false, false);
//Creating a json request
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(ConfigPost.GET_URL,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//Dismissing the progress dialog
progressDialog.dismiss();
//calling method to parse json array
parseData(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
//Creating request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
//Adding request to the queue
requestQueue.add(jsonArrayRequest);
}
//This method will parse json data
private void parseData(JSONArray array){
for(int i = 0; i<array.length(); i++) {
PostItems postItem = new PostItems();
JSONObject jsonObject = null;
try {
jsonObject = array.getJSONObject(i);
postItem.setPost_image(jsonObject.getString(ConfigPost.TAG_POST_IMAGE));
postItem.setPost_title(jsonObject.getString(ConfigPost.TAG_POST_TITLE));
postItem.setPost_body(jsonObject.getString(ConfigPost.TAG_POST_BODY));
} catch (JSONException w) {
w.printStackTrace();
//Toast.makeText(this, "Error in parsing Json", Toast.LENGTH_LONG).show();
}
mPostItemsList.add(postItem);
}
//Finally initialing the adapter
adapter = new PostAdapter(mPostItemsList, this);
//Adding adapter to recyclerview
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
Adapter Klasse
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder>{
private ImageLoader mImageLoader;
private Context mContext;
//List of posts
List<PostItems> mPostItems;
public PostAdapter(List<PostItems> postItems, Context context) {
super();
//Getting all Posts
this.mPostItems = postItems;
this.mContext = context;
}
@Override
public ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.post_summ, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
PostItems postList = mPostItems.get(position);
mImageLoader = VolleyRequest.getInstance(mContext).getImageLoader();
mImageLoader.get(postList.getPost_image(), ImageLoader.getImageListener(holder.postImage, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));
holder.postImage.setImageUrl(postList.getPost_image(), mImageLoader);
holder.postTitle.setText(postList.getPost_title());
holder.postBody.setText(postList.getPost_body());
}
@Override
public int getItemCount(){
//Return the number of items in the data set
return mPostItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public NetworkImageView postImage;
public TextView postTitle;
public TextView postBody;
public ViewHolder(View postView) {
super(postView);
postImage = (NetworkImageView) postView.findViewById(R.id.post_image);
postTitle = (TextView) postView.findViewById(R.id.post_title);
postBody = (TextView) postView.findViewById(R.id.post_body);
}
}
}
XML-Layout
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.jadebyte.geekng.MainActivity"
tools:showIn="@layout/app_bar_main">
<android.support.v7.widget.RecyclerView
android:id="@+id/post_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</RelativeLayout>
Jede Idee, was es verursachen könnte?
Initialisieren Sie den Adapter? Wenn Sie nur 'setAdapter (adapter)' ausführen, bevor Sie den Adapter tatsächlich erstellen, entspricht dies "setAdapter (null)" und Sie sehen diese Nachricht. –
Ich habe meine Frage bearbeitet. – Faraday
Bitte posten Sie auch etwas von Ihrem Adapter-Code, wenn Sie könnten. –