2017-06-22 9 views
-1

私はAPIでダウンロードされたアイテムによってはrecyclerviewを実装しました。私はアプリを実行したり、私はSearchViewに入力を開始しない限り、私はすべてのアイテムが表示されないこの断片に行くときenter image description heresearchviewで入力しない限りRecyclerviewが表示されない

Iここ

ご覧くださいGIF形式(searchviewや他のものの機能okです)データをダウンロードするにはVolleyを使用し、画像をダウンロードするにはPicassoを使用しています。

どこが間違っていますか?

注:それが自然と問題なく項目を示したことが数回起こった(ちょうど100回中3回など)

ここでは私のfragment.xmlのレイアウトです:

<FrameLayout 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.abed.whitelabel.Fragments.MainFragment"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <android.support.v7.widget.SearchView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/search_view"> 

     </android.support.v7.widget.SearchView> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/content_employee_list"></android.support.v7.widget.RecyclerView> 

    </LinearLayout> 


</FrameLayout> 

メイン私MainFragment.javaクラスの部品:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    downloadEmployeeData(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_main, container, false); 


    MainFragment.setMainFragment(this); 

    sv = (SearchView)view.findViewById(R.id.search_view); 
    RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.content_employee_list); 
    mAdapter = new EmployeeAdapter(mainFragment.getContext(), employees_Array); 
    //mAdapter = new EmployeeAdapter(this, employees_Array); this was the old one 
    recyclerView.setAdapter(mAdapter); 

    //LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(mainFragment.getContext(), LinearLayoutManager.VERTICAL, false); 
    recyclerView.setLayoutManager(layoutManager); 

    //Events for searching through list 
    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener(){ 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      mAdapter.getFilter().filter(newText); 
      return false; 
     } 
    }); 

    return view; 
} 
public void downloadEmployeeData() { 
    // here I download the data and fill the array 
} 

public class EmployeeAdapter extends RecyclerView.Adapter<EmployeesDataViewHolder> implements Filterable { 

    Context c; 
    ArrayList<EmployeesInfo> mEmployeesInfo; 
    ArrayList<EmployeesInfo> currentList; 

    public EmployeeAdapter(Context c, ArrayList<EmployeesInfo> mEmployeesInfo){ 
     this.c = c; 
     this.mEmployeesInfo = mEmployeesInfo; 
     this.currentList = mEmployeesInfo; 
    } 

    @Override 
    public void onBindViewHolder(EmployeesDataViewHolder holder, int position) { 
     final EmployeesInfo employee = this.mEmployeesInfo.get(position); 
     holder.updateUI(employee); 

     holder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       MainActivity mainActivity = (MainActivity)getActivity(); 
       mainActivity.loadDetailsFragment(employee); 
      } 
     }); 


    } 


    @Override 
    public int getItemCount() { 
     return mEmployeesInfo.size(); 
    } 


    @Override 
    public EmployeesDataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View card = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_employees, parent, false); 
     //VolleyGet.getInstance(getA) 
     return new EmployeesDataViewHolder(card); 
    } 



    // FOR search stuff 

    @Override 
    public Filter getFilter() { 
     return FilterHelper.newInstance(currentList,this); 
    } 

    public void setEmployeesInfo(ArrayList<EmployeesInfo> filteredEmployees) 
    { 
     this.mEmployeesInfo = filteredEmployees; 
    } 
} 

そして、私のDataViewHolder:

パブリッククラスEmployeesDataViewHolderはRecyclerView.ViewHolder {

private ImageView mainPhoto; 
private TextView firstName; 
private TextView lastName; 

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

    mainPhoto = (ImageView)itemView.findViewById(R.id.list_photo); 
    firstName = (TextView)itemView.findViewById(R.id.list_firstName); 
    lastName = (TextView)itemView.findViewById(R.id.list_lastName); 


} 


public void updateUI(EmployeesInfo employee){ 

    firstName.setText(employee.getFirstName()); 
    lastName.setText(employee.getLastName()); 
    Picasso.with(mainPhoto.getContext()).load(employee.getPhoto()).into(mainPhoto); 


} 

}

+1

ポストコード....... –

+0

あなたのレイアウトに問題があるようです。レイアウトxmlを表示して、あなたを助けることができますか? –

+0

また、APIからロードした後にアダプタを設定する場合は、 –

答えて

-1

をこれらの多くの部分を更新してくださいあなたはすべての従業員のデータをダウンロードした後に追加されていない場合は行の次の追加を延長しますdownloadEmployeeData()関数:

mAdapter.notifyDataSetChanged(); 

あなたはref downloadEmployeeData関数でデータが追加されると、アダプタを再スキャンし、[検索]をクリックすると、フィルタコードがデータを更新しています。

+0

ありがとうございました:) –

+0

なぜdownvote?私は実際にあなたの質問に答えました、私はしていませんか? – nitinkumarp

1

あなたのコード内で

RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.content_employee_list); 

    //LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); 
     LinearLayoutManager layoutManager = new LinearLayoutManager(mainFragment.getContext(), LinearLayoutManager.VERTICAL, false); 
     recyclerView.setLayoutManager(layoutManager); 


     mAdapter = new EmployeeAdapter(mainFragment.getContext(), employees_Array); 
     //mAdapter = new EmployeeAdapter(this, employees_Array); this was the old one 
     recyclerView.setAdapter(mAdapter); 
+0

更新したコード –

+0

@Override public long getItemId(int position){ 戻り位置; } –

関連する問題