У меня есть три вкладки, каждая из которых должна показывать конкретные данные, полученные с сервера. Я создал только один фрагмент, который должен показывать различную информацию, на основе которой открыта вкладка, однако когда приложение запускает только одну вкладку, отображается информация, и через некоторое время она падает на линии, когда я создаю новый NamesAdapter`только один из трех скользящих вкладок показывает данные
public class TabFragment extends Fragment {
private static final String TAG = "TabFragment";
int page;
private ArrayList<Names> namesList;
NamesAdapter adapter;
ListView listView;
public TabFragment() {
// Required empty public constructor
}
public static TabFragment newInstance(int page) {
TabFragment fragment = new TabFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
namesList = new ArrayList<>();
listView = (ListView) getActivity().findViewById(R.id.listView);
// Inflate the layout for this fragment
new MyTask().execute();
return inflater.inflate(R.layout.fragment_tab, container, false);
}
private class MyTask extends AsyncTask<String, String, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
String content = HttpManager.getData("http://union.ge/catalog/1455299520.json");
Log.e("doInBackground", "was called");
//return content;
try {
JSONArray json= new JSONArray(content);
// get json objects one by one
for (int i = 0; i < json.length(); i++){
Names names = new Names();
// this json object now has key-value pairs and
JSONObject jRealObject = json.getJSONObject(i).getJSONObject("name");
//Log.e("jrealobject", jRealObject.toString());
names.setEn(jRealObject.getString("en"));
names.setGe(jRealObject.getString("ge"));
names.setRu(jRealObject.getString("ru"));
//migebuli monacemebi shevinaxot chvens array-shi
namesList.add(names);
}
return true;
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
// on postExecute method runs on the UI thread
protected void onPostExecute(Boolean b) {
super.onPostExecute(b);
if(b){
adapter = new NamesAdapter(getContext(), R.layout.list_item, namesList, page);
Log.e(TAG, String.valueOf(page));
listView = (ListView) getActivity().findViewById(R.id.listView);
listView.setAdapter(adapter);
} else {
Toast.makeText(getActivity(), "data was not parsed", Toast.LENGTH_SHORT).show();
}
}
}
}
`
public class TabsAdapter extends FragmentPagerAdapter {
final static int PAGE_COUNT = 3;
private static final String TAG = "TabsAdapter";
private String tabTitles[] = new String[] { "EN", "GE", "RU" };
private Context context;
public TabsAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return TabFragment.newInstance(0);
case 1:
return TabFragment.newInstance(1);
case 2:
return TabFragment.newInstance(2);
default:
return null;
}
}
@Override
public int getCount() {
return PAGE_COUNT;
}
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
FragmentManager manager = ((Fragment)object).getFragmentManager();
android.support.v4.app.FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment)object);
trans.commit();
}
}
и адаптер для имен класса
public class NamesAdapter extends ArrayAdapter<Names> {
private static final String TAG = "NamesAdapter";
ArrayList<Names> items;
Context context;
int resource;
int page;
LayoutInflater vi;
public NamesAdapter(Context context, int resource, ArrayList<Names> items, int pageNumber) {
super(context, resource, items);
this.context = context;
this.resource = resource;
this.items = items;
this.page = pageNumber;
vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null){
// convertView = vi.inflate(resource, null);
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) convertView.findViewById(R.id.textView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
switch (page) {
case 0:
viewHolder.textView.setText(items.get(position).getEn());
break;
case 1:
viewHolder.textView.setText(items.get(position).getGe());
break;
case 2:
viewHolder.textView.setText(items.get(position).getRu());
}
return convertView;
}
static class ViewHolder {
public TextView textView;
}
}
Вставить logcat, с помощью которого приложение ошибки разбилось в адаптере? –
E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at android.widget.ArrayAdapter.init (ArrayAdapter.java:310) в android.widget.ArrayAdapter. (ArrayAdapter.java:153) в ge.mobility.anako.parser.NamesAdapter. (NamesAdapter.java:33)at ge.mobility.anako.parser.TabFragment $ MyTask.onPostExecute (TabFragment.java:111) в файле ge.mobility.anako.parser.TabFragment $ MyTask.onPostExecute (TabFragment.java:62) –
@AnaKoridze Смотрите мой обновленный ответ ... Надеюсь, он вам поможет. –