-1

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> 
+0

„dann habe ich nur ein Element in meiner Liste“ - bedeutet das, dass '(getItemCount() == 1)' – 0X0nosugar

+0

ich auf dem Bildschirm – Rost

+1

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

Antwort

1

Sie brauchen nicht diese Zeile userAdapter.notifyDataSetChanged() in der Funktion prepareUserData() . Stellen Sie dann den Aufruf von prepareUserData() vor der Initialisierung des UserAdapter ein, und entfernen Sie den Aufruf von notifyDataSetChanged().

Darüber hinaus können Sie mithilfe von RecyclerView den Adapter itens effizienter aktualisieren als notifyDataSetChanged(), was kostspielig ist. Überprüfen Sie, ob für weitere Details http://developer.android.com/intl/pt-br/reference/android/support/v7/widget/RecyclerView.Adapter.html

+0

Ich habe versucht, aber nichts geändert :(Ein Element in der Liste – Rost

+1

prepareUserData() ist nur einen Benutzer initialisieren, schauen Sie, ersetzen Sie den Code von prepareUserData() zu diesem Code: Benutzer user = new User (R.drawable.emilypic "Marry Young", "marbear", R.id.item_follow_button); userList.add (Benutzer); Benutzer user2 = new User (R .drawable.emilypic "Marry Young", "marbear", R.id.item_follow_button); userList.add (Benutzer); und dann: userList.add (Benutzer); userList.add (Benutzer2); –

+0

Ich versuchte dies, aber nichts passierte.Wenn Sie Datenstrukturen kennen Liste kann Datensätze wiederholt haben, ist es kein Set. – Rost

Verwandte Themen