0

我有這個橫向錯誤。我正在從API下載數據,我想將它打印在嵌套在片段中的RecyclerView中,名爲ListFragment。這個片段是我在ViewPager中使用的三個片段之一。 ViewPager工作正常。目前,我只想顯示兩個文本視圖。他們的佈局名稱爲single_data_layoutList<Feature> features是我的DataResponse。項目構建通常沒有問題,我在Log中收到「數據已成功下載」。當我在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); 
    } 
} 

的DataAdapter:

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

我看到適配器類沒有一個背景下,我想如果你添加到適配器構造背景下C作爲您的問題將得到解決

第二個參數嘗試以replase

public DataAdapter(List<Feature> features) { 

    this.features = features; 
} 

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

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

並替換該線路片段類

adapter = new DataAdapter(features); 

由此 adapter = new DataAdapter(features,getActivity());

希望這會幫助你:)

相關問題