gpt4 book ai didi

android - 带有 CustomListAdapter 和 Volley 的 Fragment ViewPager?

转载 作者:行者123 更新时间:2023-11-29 17:39:15 24 4
gpt4 key购买 nike

我需要扩展 ActionBarActivitypublic class FragmentB。它没有错误,但是当我尝试在适配器中调用它时。

FragmentPagerAdapter 代码:

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;
}
}

它说我需要一个在 return b 处扩展 android.support.v4.app.Fragment 的类。在 Fragment A 和 C 中没有 ActionBarActivity 的实现,这就是没有错误的原因,而在 return b 中有错误。

基本上,我需要在 fragment B 上显示所有事件。如果我在没有 fragment 的情况下测试它,它会工作,但有了它们就会变成一个小问题。由于用于滑动的 ViewPager,我需要这些 fragment 。

fragment 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;
}
}

自定义列表适配器代码: 公共(public)类 CustomListAdapter 扩展 BaseAdapter { 私有(private) Activity Activity ; 私有(private) LayoutInflater 充气机; 私有(private)列表事件项; 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 是在一切膨胀或创建 Activity 和 fragment 之前,而 OnCreateView 设置 fragment 布局。我不知道该怎么办。

最佳答案

将此行添加到 AndroidManifest.xml 中的 application 标记 MyApplication 项目中的文件:

android:name="primoz.test.com.volleytesting.AppController"

如果您在应用程序 list 中错过了这一行,那么每次调用时 AppController.getInstance() 都将为 null。

关于android - 带有 CustomListAdapter 和 Volley 的 Fragment ViewPager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29340118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com