Я добрый новый на Android, и я следил за этим link, чтобы создать начальную структуру моего приложения, с TabLayout
и ViewPager
.Android - AsyncTask не освежает Fragment RecyclerView
Каждая страница представляет собой фрагмент (который я не знаю, если это правильный путь), но это выставиться так:
public class BaseActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
...
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new CarListFragment());
adapter.addFragment(new ProductsFragment());
adapter.addFragment(new UserFragment());
this.baseViewPager.setAdapter(adapter);
}
}
CarListFragment:
public class CarListFragment extends Fragment implements ICarListTask {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View carListFragment = inflater.inflate(R.layout.carlist_fragment, parent, false);
carList = (RecyclerView) carListFragment.findViewById(R.id.car_list);
new CarListTask(this.getContext(), this).execute();
return carListFragment;
}
@Override
public void onLoadingComplete(ArrayList<Car> result) {
if (carList != null) {
if (result == null) {
...
}
else {
adapter = new CarAdapter(this.getContext(), result);
adapter.notifyDataSetChanged();
}
}
}
* Существует нет соответствующего кода на CarListTask
(просто получить некоторые данные из веб-API).
Проблема заключается в том, что CarAdapter.onCreateViewHolder
и CarAdapter.onBindViewHolder
никогда не вызываются, и, следовательно, RecyclerView не заполняется.
Любые предложения, почему это происходит?
EDIT:
Реализация Карлистские:
<?xml version="1.0" encoding="utf-8"?>
<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"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/car_list"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:scrollbars="none"
android:overScrollMode="never"
android:divider="@android:color/transparent"
android:clipToPadding="false"
android:dividerHeight="10sp"/>
<TextView
android:id="@+id/empty"
android:text="@string/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
/>
</RelativeLayout>
CarListTask:
public class CarListTask extends AsyncTask<Object, Object, ArrayList<Car>> {
private Context context;
private ICarListTask callback;
public CarListTask (Context context, Fragment fragment) {
this.context = context;
this.callback = (ICarListTask) fragment;
}
@Override
protected ArrayList<Car> doInBackground(Object... params) {
...// methods to connect to web API
try {
//data is the result from WEB API, which is OK
JSONArray result = new JSONArray(data);
Type collectionType = new TypeToken<ArrayList<Car>>(){}.getType();
return new Gson().fromJson(result.toString(), collectionType);
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
@Override
public void onPostExecute(ArrayList<Car> result) {
super.onPostExecute(result);
this.callback.onLoadingComplete(result);
}
}
Вы должны показать нам, как 'carList' определяется и то, что' CarListTask' код выглядит следующим образом. –
Вам также нужно установить адаптер – Shubham
Кажется, у recyclerview нет набора менеджеров макетов, установите диспетчер компоновки: cartList.setLayoutManager (новый LinearLayoutManager (это)); Дайте мне знать, если это поможет. –