0

このエラーがあります。私はAPIからデータをダウンロードしています。それをListFragmentというフラグメントにネストされたRecyclerViewで印刷したいと思います。このフラグメントは、私がViewPagerで使用する3つのうちの1つです。 ViewPagerは問題なく動作します。今のところ、2つのtextViewだけを表示したいと思います。レイアウトはsingle_data_layoutです。 List<Feature> featuresは私のDataResponseです。プロジェクトは問題なく正常に構築され、ログに「データは正常にダウンロードされました」というメッセージが表示されます。 DebugModeでアプリを実行すると、RecyclerViewがアダプタに接続されていないというメッセージが表示されます。何か案は?RecyclerViewがアダプタに接続されていません

ApiClient:

public interface ApiClient { 

    @GET("/query?format=geojson&starttime&minsig=700") 
    Call<DataResponse> getData(); 
} 

ApiClientFactory:

public class ApiClientFactory { 

    public static final String baseURL = "https://earthquake.usgs.gov/fdsnws/event/1/"; 

    public ApiClient createApiClient(){ 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(baseURL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     return retrofit.create(ApiClient.class); 
    } 
} 

データアダプター:

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

    private List<Feature> features; 
    private ListFragment listFragment; 
    private Context context; 
    private LayoutInflater inflater; 

    public DataAdapter(List<Feature> features) { 

     this.features = features; 
    } 

    @Override 
    public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     inflater = LayoutInflater.from(context); 
     View contractView = inflater.inflate(R.layout.single_data_layout, parent, false); 

     return new DataViewHolder(contractView); 
    } 

    @Override 
    public void onBindViewHolder(DataViewHolder holder, int position) { 

     holder.place.setText(features.get(position).getProperties().getPlace()); 
     holder.alert.setText(features.get(position).getProperties().getAlert()); 
    } 

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

    public static class DataViewHolder extends RecyclerView.ViewHolder { 

     private final TextView place; 
     private final TextView alert; 

     public DataViewHolder(View view) { 
      super(view); 
      place = (TextView) view.findViewById(R.id.place_text_view); 
      alert = (TextView) view.findViewById(R.id.alert_text_view); 
     } 
    } 
} 

ListFragment:

public class ListFragment extends Fragment { 

    private RecyclerView recyclerView; 
    private static final String TAG = ListFragment.class.getSimpleName(); 
    private ApiClient apiClient; 
    private List<Feature> features; 
    private RecyclerView.LayoutManager layoutManager; 
    private DataAdapter adapter; 

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

     recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); 
     getData(); 

     return view; 
    } 

    private void getData() { 
     apiClient = new ApiClientFactory().createApiClient(); 

     apiClient.getData().enqueue(new Callback<DataResponse>() { 
      @Override 
      public void onResponse(Call<DataResponse> call, Response<DataResponse> response) { 
       if (response.isSuccessful()) { 
        features = response.body().getFeatures(); 

        adapter = new DataAdapter(features); 
        layoutManager = new LinearLayoutManager(getActivity()); 

        recyclerView.setAdapter(adapter); 
        recyclerView.setLayoutManager(layoutManager); 

       } 
       Log.d(TAG, "Data successfully downloaded"); 
      } 

      @Override 
      public void onFailure(Call<DataResponse> call, Throwable t) { 
       Log.e(TAG, t.toString()); 
      } 
     }); 
    } 
} 

答えて

1

あなたはレイアウトを膨らませる方法を変更する必要があります。これはトリックを行う必要があります。

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

    private List<Feature> features; 

    public DataAdapter(List<Feature> features) { 
     this.features = features; 
    } 

    @Override 
    public DataAdapter.DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.single_data_layout, parent, false); 
     return new DataViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(DataViewHolder holder, int position) { 

     holder.place.setText(features.get(position).getProperties().getPlace()); 
     holder.alert.setText(features.get(position).getProperties().getAlert()); 
    } 

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

    public static class DataViewHolder extends RecyclerView.ViewHolder { 

     private final TextView place; 
     private final TextView alert; 

     public DataViewHolder(View view) { 
      super(view); 
      place = (TextView) view.findViewById(R.id.place_text_view); 
      alert = (TextView) view.findViewById(R.id.alert_text_view); 
     } 
    } 
} 
+0

本当にありがとう;)! – Dominik

1

私はアダプタクラスは、コンテキストを持っていないあなたの問題はによって

public DataAdapter(List<Feature> features) { 

    this.features = features; 
} 

をreplaseする

試して解決される2番目のパラメータとしてcを使用すると、アダプタのコンストラクタコンテキストに追加した場合、私は推測していることがわかりフラグメントのクラスでこの

public DataAdapter(List<Feature> features, Context c) { 

    this.features = features; 
    this.context = c; 
} 

と交換してください。このライン

adapter = new DataAdapter(features); 

by アダプター=新しいDataAdapter(features、getActivity());

希望これはあなたを助ける:)

関連する問題