我需要扩展ActionBaractivity
的公共类碎片B
。它没有错误,但当我试图在适配器中调用它时。
public class FragmentPagerAdapter extends android.support.v4.app.FragmentPagerAdapter{
private static int NUM_ITEMS = 3;
public FragmentPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
// Returns total number of pages
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
FragmentA a = new FragmentA();
return a;
case 1:
FragmentB b = new FragmentB();
return b;
case 2:
FragmentC c = new FragmentC();
return c;
default:
return null;
}
}
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
}
基本上,我需要显示片段B上的所有事件。如果我在没有片段的情况下测试它,它可以工作,但有了它们,它就成了一个小问题。我需要这些片段,因为viewpager
用于滑动。
片段B代码:
private static final String TAG = FragmentB.class.getSimpleName();
private static final String url = "http://server.si/events.php";
private ProgressDialog pDialog;
private List<Event> eventList = new ArrayList<Event>();
private ListView listView;
private CustomListAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new CustomListAdapter(getActivity(), eventList);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_b, container, false);
ListView listView = (ListView) rootView.findViewById(R.id.list);
listView.setAdapter(adapter);
pDialog.setMessage("Loading Events...");
pDialog.show();
JsonArrayRequest eventReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
hidePDialog();
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Event event = new Event();
event.setTitle(obj.getString("name"));
event.setPicture_url(obj.getString("picture_url"));
event.setCity(obj.getString("city"));
event.setDate(obj.getString("date"));
eventList.add(event);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
// so that it renders the list view with updated data
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
hidePDialog();
}
});
AppController.getInstance().addToRequestQueue(eventReq);
return rootView;
}
@Override
public void onDestroy() {
super.onDestroy();
hidePDialog();
}
private void hidePDialog() {
if (pDialog != null) {
pDialog.dismiss();
pDialog = null;
}
}
CustomListAdapter代码:公共类CustomListAdapter扩展BaseAdapter{private Activity;private LayoutInflater Inflater;private List eventItems;ImageLoader ImageLoader=AppController.getInstance().getImageLoader();public CustomListAdapter(Activity Activity,List eventItems){this.Activity=Activity;this.eventItems=eventItems;}
@Override
public int getCount() {
return eventItems.size();
}
@Override
public Object getItem(int location) {
return eventItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_row, null);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
NetworkImageView thumbNail = (NetworkImageView) convertView
.findViewById(R.id.picture);
TextView name = (TextView) convertView.findViewById(R.id.name);
TextView city = (TextView) convertView.findViewById(R.id.city);
TextView date = (TextView) convertView.findViewById(R.id.date);
Event m = eventItems.get(position);
thumbNail.setImageUrl(m.getPicture_url(), imageLoader);
name.setText(m.getTitle());
city.setText("City: " + String.valueOf(m.getCity()));
date.setText(String.valueOf(m.getDate()));
return convertView;
}
这是运行时的错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.toolbox.ImageLoader teamtwo.event.com.events.Events.AppController.getImageLoader()' on a null object reference
at teamtwo.event.com.events.Events.CustomListAdapter.<init>(CustomListAdapter.java:27)
at teamtwo.event.com.events.FragmentB.onCreate(FragmentB.java:50)
看起来,我在OnCreate方法上做了一些错误的事情。我不知道该把代码放哪儿。OnCreate是在所有内容膨胀或创建活动和片段之前,而OnCreateView设置片段布局。我不知道该怎么办。
将这一行添加到myapplication
项目中androidmanifest.xml
文件中的application
标记:
android:name="primoz.test.com.volleytesting.AppController"
如果在应用程序清单中遗漏了这一行,那么每次调用appcontroller.getInstance()
时都将为null。
在使用带有片段的时,在选项卡之间移动时不会调用我们的和方法。我们有什么办法可以从碎片中找出我们是被发现还是被隐藏? 不幸的是,我在、中有逻辑,就像在location services注册一样,在切换选项卡时永远不会停止,因为在退出整个应用程序之前,永远不会调用。
根据谷歌的文档: 现在可以在片段中嵌入片段。这对于各种情况都很有用,在这些情况下,您需要将动态和可重用的UI组件放置到本身是动态和可重用的UI组件中。例如,如果使用ViewPager创建左右滑动并占用大部分屏幕空间的片段,现在可以将片段插入每个片段页面。要嵌套片段,只需对要添加片段的片段调用getChildFragmentManager()。这将返回一个FragmentManager,您可以像通常
我正在尝试应用抽屉激活(我的第一个片段是一张地图) 日志: 我认为这是最重要的: 这是我的代码:LoginScreen:fragmentActivity,它对片段进行所有调用 这是我的片段活动的主要布局: 这是mapfragment的xml布局: 这是mapfraps代码: 我认为问题出在简历上
我的应用程序中有一个viewpager,它有7个片段,每个片段代表各自的逻辑 但是,有两个片段是相互耦合的,一个片段不能没有另一个片段而存在。 我有两个按钮,在屏幕底部的“上一个”和“下一个”,在片段之间切换。 我想使viewpager中的滑动无法到达其中一个耦合片段 现在我这样做:我把第一个片段(耦合的片段)放在位置0,第二个片段放在最后一个位置,这样当你左右滑动时,你就可以最后到达第二个耦合的
现在,我想使用Parse添加服务器拉请求,将列表中的数据添加到适配器,并在用户查看页面后填充recyclerview,这样 1)我是否应该添加setUserVisisbleHint中的所有代码,并只添加0.5秒延迟,以便在调用setContentView后执行它,以确保不出现空指针异常错误或 2)是否有更好的方法/其他功能可以实现相同的功能?
02-27 04:45:26.808:e/AndroidRuntime(4739):致命异常:main 02-27 04:45:26.808:e/AndroidRuntime(4739):java.lang.runtimeException:无法启动活动ComponentInfo{com.koenb_fashion_fix/com.koenb_fashion_fix.mainActivity}:j