Ich habe dieses Fragment mit RecyclerViewInitialazing Daten in RecyclerView
package com.example.myapplication;
import android.annotation.TargetApi;
import android.app.FragmentManager;
import android.os.Build;
import android.os.Bundle;
import android.app.Fragment;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.List;
public class Fragment_Username_Search extends Fragment {
private List<User> userList = new ArrayList<>();
private RecyclerView recyclerView;
private UserAdapter userAdapter;
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
private void prepareUserData() {
User user = new User(R.drawable.emilypic,"Marry Young","marbear",R.id.item_follow_button);
userList.add(user);
user = new User(R.drawable.emilypic,"Marry Young","marbear",R.id.item_follow_button);
userList.add(user);
user = new User(R.drawable.emilypic,"Sammy Lee","sambam",R.id.item_follow_button);
userList.add(user);
user = new User(R.drawable.emilypic,"Lilly Martinson","lilmartini",R.id.item_follow_button);
userList.add(user);
userAdapter.notifyDataSetChanged();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment__username__search, container, false);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
recyclerView = (RecyclerView) view.findViewById(R.id.RecyclerView);
userAdapter = new UserAdapter(userList);
prepareUserData();
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(userAdapter);
userAdapter.SetOnItemClickListener(new UserAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
FragmentManager fm = getFragmentManager();
android.app.DialogFragment dialogFragment = new DialogFragment();
dialogFragment.show(fm, "Sample Fragment");
}
});
return view;
}
}
und wenn ich preparedata verwenden müssen()? Wenn ich diese verwenden, nachdem
userAdapter = new UserAdapter(userList);
dann habe ich nur ein Element in meiner Liste Aber in Vorbereitung Daten sind 4 Elemente, wie kann ich das beheben? Wenn ich preparedata() vor diesem Code (Adapter initialisieren) Ich habe einen Fehler, da notifyDataSetChanged Rückruf auf Null-Objekt. UserAdapter:
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder> {
private List<User> UserList;
OnItemClickListener mItemClickListener;
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder = null;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View viewUser = inflater.inflate(R.layout.row_item_layout,parent,false);
viewHolder = new MyViewHolder(viewUser,mItemClickListener);
return (MyViewHolder) viewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.UserTitle.setText(UserList.get(position).getTitle());
holder.UserDescription.setText(UserList.get(position).getDescription());
holder.UserIcon.setImageResource(R.drawable.emilypic);
}
public UserAdapter(List<User> UserList){
this.UserList = UserList;
}
@Override
public int getItemCount() {
return UserList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ImageView UserIcon;
public TextView UserTitle;
public TextView UserDescription;
public Button UserFollowButton;
public MyViewHolder(View itemView, UserAdapter.OnItemClickListener clickListener) {
super(itemView);
clickListener = (OnItemClickListener) mItemClickListener;
UserIcon = (ImageView) itemView.findViewById(R.id.item_icon);
UserTitle = (TextView) itemView.findViewById(R.id.item_title);
UserDescription = (TextView) itemView.findViewById(R.id.item_description);
UserFollowButton = (Button) itemView.findViewById(R.id.item_follow_button);
//itemView.setOnClickListener(this);
UserFollowButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
mItemClickListener.onItemClick(v, getPosition());
}
}
public interface OnItemClickListener{
public void onItemClick(View view,int position);
}
public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
this.mItemClickListener = mItemClickListener;
}
}
Layout für Fragment:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myapplication.Fragment_Username_Search">
<LinearLayout
android:id="@+id/Search_field"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:focusable="true"
android:focusableInTouchMode="true"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_search_black_48dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="Search"
android:textIsSelectable="false"
/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:layout_below="@id/Search_field"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/RecyclerView"
>
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
Layout für Artikel:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:id="@+id/item_icon"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="1dp"
/>
<LinearLayout
android:layout_toRightOf="@id/item_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/item_title"
android:textSize="22dp"
android:textColor="@android:color/darker_gray"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/item_description"
android:textSize="16dp"
/>
</LinearLayout>
<Button
android:layout_width="90dp"
android:layout_height="40dp"
android:id="@+id/item_follow_button"
android:layout_marginRight="30dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:background="@drawable/follow_btn"
/>
</RelativeLayout>
„dann habe ich nur ein Element in meiner Liste“ - bedeutet das, dass '(getItemCount() == 1)' – 0X0nosugar
ich auf dem Bildschirm – Rost
traurig über die downvote nur ein Element gesehen? (Ich war nicht ich, ich mag Fragen mit genug Code, um das Problem zu reproduzieren) Ich lege deinen Code einfach in eine meiner Apps. Die gute Nachricht: Ich habe vier Listenpunkte. Ich denke, die Ursache Ihres Problems muss in einem Teil liegen, den ich patchen musste: Sie haben keine Layout-Dateien veröffentlicht. – 0X0nosugar