2017-02-11 8 views
0

Я создаю список recycleview с помощью модификации, и я хочу добавить searchview в панель действий. но я получил сообщение об ошибке No adapter attached; skipping layout это мой mainActivitySearchView on recycleview с использованием модификации

public class ListActivity extends AppCompatActivity { 
private RecyclerView recyclerView; 
private ArrayList<AndroidVersion> data; 
private DataAdapter adapter; 
private SearchView searchView; 
private MenuItem searchMenuItem; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list); 
    recyclerView = (RecyclerView) findViewById(R.id.card_recView); 
    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); 
    recyclerView.setLayoutManager(layoutManager); 
    adapter = new DataAdapter(data); 
    recyclerView.setAdapter(adapter); 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl("https://api.learn2crack.com/android/") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    RequestInterface request = retrofit.create(RequestInterface.class); 
    Call<JSONResponse> call = request.getJSON(); 
    call.enqueue(new Callback<JSONResponse>() { 
     @Override 
     public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 
      JSONResponse jsonResponse = response.body(); 
      data = new ArrayList<AndroidVersion>(Arrays.asList(jsonResponse.getAndroid())); 
      adapter.swapData(data); 
      Toast.makeText(ListActivity.this, " Hasil", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onFailure(Call<JSONResponse> call, Throwable t) { 
      Log.d("ERROR", t.getMessage()); 
      Toast.makeText(ListActivity.this, " ERROR ", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.search_menu, menu); 

    SearchManager searchManager = (SearchManager) 
      getSystemService(Context.SEARCH_SERVICE); 
    searchMenuItem = menu.findItem(R.id.search); 
    searchView = (SearchView) searchMenuItem.getActionView(); 

    searchView.setSearchableInfo(searchManager. 
      getSearchableInfo(getComponentName())); 
    searchView.setSubmitButtonEnabled(true); 
    searchView.setOnQueryTextListener((SearchView.OnQueryTextListener) this); 
    return true; 
} 

}

код выше только для показа макета SearchView. Если у кого-то есть другой способ или другой полный учебник, пожалуйста. спасибо заранее

EDIT это мой адаптер

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder>{ 

private ArrayList<AndroidVersion> android; 
public DataAdapter(ArrayList<AndroidVersion> android){ 
    this.android = android; 
} 

@Override 
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) { 
    viewHolder.nama_dokter.setText(android.get(i).getName()); 
    viewHolder.alamat_1.setText(android.get(i).getVer()); 
    viewHolder.alamat_2.setText(android.get(i).getVer()); 
    viewHolder.alamat_3.setText(android.get(i).getVer()); 
    viewHolder.total_ps.setText(android.get(i).getApi()); 
    viewHolder.total_omzet.setText(android.get(i).getApi()); 
    viewHolder.total_pasien.setText(android.get(i).getApi()); 
} 

@Override 
public int getItemCount() { 
    return android.size(); 
} 
private ArrayList<AndroidVersion> data = new ArrayList<>(); 
public void swapData(ArrayList<AndroidVersion> data) { 
    this.data.addAll(data); 
    notifyDataSetChanged(); 
} 


public class ViewHolder extends RecyclerView.ViewHolder { 

    private TextView nama_dokter, alamat_1, alamat_2, alamat_3, total_ps, total_omzet, total_pasien; 
    public ViewHolder(View view) { 
     super(view); 
     nama_dokter = (TextView)view.findViewById(R.id.nama_dok); 
     alamat_1 = (TextView)view.findViewById(R.id.alamat_1); 
     alamat_2 = (TextView)view.findViewById(R.id.alamat_2); 
     alamat_3 = (TextView)view.findViewById(R.id.alamat_3); 
     total_ps = (TextView)view.findViewById(R.id.total_ps); 
     total_omzet = (TextView)view.findViewById(R.id.total_omset); 
     total_pasien = (TextView)view.findViewById(R.id.total_pasien); 
    } 
} 

}

ответ

0

Update

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list); 
    recyclerView = (RecyclerView) findViewById(R.id.card_recView); 
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); 
    recyclerView.setLayoutManager(layoutManager); 
    adapter = new DataAdapter(data); 
    recyclerView.setAdapter(adapter); 
} 

внутри onResponse

adapter.swapData(data)

внутри DataAdapter

private ArrayList<AndroidVersion> data= new ArrayList<>(); 
public void sawpData(ArrayList<AndroidVersion> data) { 
      this.data.addAll(data); 
      notifyDataSetChanged(); 
} 

Initialize адаптер с пустым конструктором или передать Context и внутри onResponse установить data как этот adapter.swapData(data) внутри данных своп установит вам список и назовите этот notifyDataSetChanged();

+0

я прошу прощения , я действительно начинаю в этом ... Можете ли вы дать мне более подробную информацию, например, шаг за шагом? спасибо до –

+0

извините, все еще ошибка. теперь сообщение об ошибке - это 'java.lang.NullPointerException: попытка вызвать виртуальный метод 'int java.util.ArrayList.size()' для ссылки на нулевой объект ' . Я добавлю свой DataAdapter.java в приведенный выше –

Смежные вопросы