Android gridview适配器parent.getChildAt(位置)返回nullPointerException
我有一个带有可下载项目gridview的下载管理器,下载完成后,我需要更新gridview按钮以向用户显示下载已完成,因此我使用BroadcastReceiver调用适配器并通知它显示更改,但我在parent.getChildAtposition中收到nullPointerException错误。我应该说,我在一个片段和一个活动中对listview使用了相同的代码,它确实工作得很好,但gridview存在一些问题。这是我的适配器getview:Android gridview适配器parent.getChildAt(位置)返回nullPointerException,android,gridview,broadcastreceiver,Android,Gridview,Broadcastreceiver,我有一个带有可下载项目gridview的下载管理器,下载完成后,我需要更新gridview按钮以向用户显示下载已完成,因此我使用BroadcastReceiver调用适配器并通知它显示更改,但我在parent.getChildAtposition中收到nullPointerException错误。我应该说,我在一个片段和一个活动中对listview使用了相同的代码,它确实工作得很好,但gridview存在一些问题。这是我的适配器getview: public View getView(final
public View getView(final int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_special, null);
TextView title = (TextView)vi.findViewById(R.id.pid); // title
final TextView artist = (TextView)vi.findViewById(R.id.name); // artist name
TextView duration = (TextView)vi.findViewById(R.id.price); // duration
final TextView fileurl = (TextView)vi.findViewById(R.id.furl); // fileurl
ImageView thumb_image=(ImageView)vi.findViewById(R.id.image); // thumb image
final TextView refrenceid = (TextView)vi.findViewById(R.id.dmrefrence); // refrence id
HashMap<String, String> song = new HashMap<String, String>();
song = data.get(position);
// Setting all values in listview
title.setText(song.get(AllProductsActivity.TAG_PID));
artist.setText(song.get(AllProductsActivity.TAG_NAME));
duration.setText(song.get(AllProductsActivity.TAG_PRICE));
fileurl.setText(song.get(AllProductsActivity.TAG_FILEURL));
imageLoader.DisplayImage(song.get(AllProductsActivity.TAG_DESCRIPTION), thumb_image);
final ImageButton pauseButton=(ImageButton)vi.findViewById(R.id.cancelButton); // image button
final ImageButton imageButton=(ImageButton)vi.findViewById(R.id.imageButton1); // image button
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// starting background task to download product
final String dfileurl = fileurl.getText().toString();
final String fname = artist.getText().toString();
imageButton.setVisibility( View.GONE );
pauseButton.setVisibility( View.VISIBLE );
SpecialFragment x = new SpecialFragment();
long id = x.myClickdwnl(fname,dfileurl,pauseButton,activity.getApplicationContext());
downloadIdToPositionMap.put(id, position);
refrenceid.setText(Long.toString(id));
}
});
/* Cancel Download */
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// starting background task to download product
final String dnid = refrenceid.getText().toString();
pauseButton.setVisibility( View.GONE );
imageButton.setVisibility( View.VISIBLE );
HomeFragment x = new HomeFragment();
x.Canceldwnl(dnid,activity.getApplicationContext());
}
});
if(this.isDownloadFinished(position)){
//ViewTreeObserver tree = parent.getViewTreeObserver();
View v = parent.getChildAt(position);
ImageButton cancelButton = (ImageButton) v.findViewById(R.id.cancelButton);
ImageButton successButton = (ImageButton) v.findViewById(R.id.succButton);
cancelButton.setVisibility( View.GONE );
successButton.setVisibility( View.VISIBLE );
for(int i=0; i<this.finishedDownloadPositions.size();i++){
if(this.finishedDownloadPositions.get(i) == position){
this.finishedDownloadPositions.remove(i);
}
}
}
return vi;
}
和logcat:
08-12 11:51:04.881: E/AndroidRuntime(850): FATAL EXCEPTION: main
08-12 11:51:04.881:E/AndroidRuntime850:java.lang.NullPointerException
08-12 11:51:04.881:E/AndroidRuntime850:at com.example.one.GridAdapter.getViewGridAdapter.java:123
08-12 11:51:04.881:E/AndroidRuntime850:at android.widget.AbsListView.ActainViewAbsListView.java:2143
08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.GridView.makendaddviewgridview.java:1341
08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.GridView.makeRowGridView.java:341
08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.GridView.fillSpecificGridView.java:543
08-12 11:51:04.881:E/AndroidRuntime850:at android.widget.GridView.layoutChildrenGridView.java:1240
2008-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.AbsListView.onLayoutAbsListView.java:1994
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373
08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.FrameLayout.onLayoutFrameLayout.java:448
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373
08-12 11:51:04.881:E/AndroidRuntime850:at android.support.v4.view.ViewPager.onLayoutViewPager.java:1528
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373
08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.FrameLayout.onLayoutFrameLayout.java:448
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373
08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.LinearLayout.setChildFrameLinearLayout.java:1663
08-12 11:51:04.881:E/AndroidRuntime850:at android.widget.LinearLayout.layoutVerticalLinearLayout.java:1521
08-12 11:51:04.881:E/AndroidRuntime850:at android.widget.LinearLayout.onLayoutLinearLayout.java:1434
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373
08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.FrameLayout.onLayoutFrameLayout.java:448
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373
08-12 11:51:04.881:E/AndroidRuntime850:at android.view.ViewRootImpl.performLayoutViewRootImpl.java:1892
08-12 11:51:04.881:E/AndroidRuntime850:at android.view.ViewRootImpl.performTraversalsViewRootImpl.java:1711
08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewRootImpl.doTraversalViewRootImpl.java:989
08-12 11:51:04.881:E/AndroidRuntime850:at android.view.ViewRootImpl$TraversalRunnable.runViewRootImpl.java:4351
08-12 11:51:04.881:E/AndroidRuntime850:at android.view.Choreographer$CallbackRecord.runChoreographer.java:749
08-12 11:51:04.881:E/AndroidRuntime850:at android.view.Choreographer.docallbackChoreographer.java:562
08-12 11:51:04.881:E/AndroidRuntime850:at android.view.Choreographer.doFrameChoreographer.java:532
08-12 11:51:04.881:E/AndroidRuntime850:at android.view.Choreographer$FrameDisplayEventReceiver.runChoreographer.java:735
08-12 11:51:04.881:E/AndroidRuntime850:at-android.os.Handler.handleCallbackHandler.java:725
08-12 11:51:04.881:E/AndroidRuntime850:at android.os.Handler.dispatchMessageHandler.java:92
08-12 11:51:04.881:E/AndroidRuntime850:at android.os.Looper.Looper.java:137
08-12 11:51:04.881:E/AndroidRuntime850:at android.app.ActivityThread.mainActivityThread.java:5041
08-12 11:51:04.881:E/AndroidRuntime850:at java.lang.reflect.Method.invokenactive方法
08-12 11:51:04.881:E/AndroidRuntime850:at java.lang.reflect.Method.invokeMethod.java:511
08-12 11:51:04.881:E/AndroidRuntime850:com.android.internal.os.ZygoteInit$methodAndArgscaler.runZygoteInit.java:793
08-12 11:51:04.881:E/AndroidRuntime850:com.android.internal.os.ZygoteInit.mainZygoteInit.java:560
08-12 11:51:04.881:E/AndroidRuntime850:at dalvik.system.NativeStart.main本机方法尝试使用上下文而不是getView方法
BroadcastReceiver griddownloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//check if the broadcast message is for our Enqueued download
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
//((GridAdapter) getActivity().getListAdapter()).setDownloadFinished(referenceId);
GridView gv1 = (GridView) context.findViewById(R.id.grid_view);
adapter = (GridAdapter) gv1.getAdapter();
//final GridAdapter adapter = (GridAdapter) ((GridView) getView()).getAdapter();
adapter.setDownloadFinished(referenceId);
adapter.notifyDataSetChanged();
// Ask the adapter to refresh the ListView
//adapter.notifyDataSetChanged();
}
};//end of broadcast reciever
如果没有
his不起作用请告诉我我有另一个想法如果您不想直接对视图本身进行操作,请修改基础数据并通知适配器刷新viewi测试的上下文,那就不走运了。同样的错误。nullPointerException
BroadcastReceiver griddownloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//check if the broadcast message is for our Enqueued download
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
//((GridAdapter) getActivity().getListAdapter()).setDownloadFinished(referenceId);
GridView gv1 = (GridView) context.findViewById(R.id.grid_view);
adapter = (GridAdapter) gv1.getAdapter();
//final GridAdapter adapter = (GridAdapter) ((GridView) getView()).getAdapter();
adapter.setDownloadFinished(referenceId);
adapter.notifyDataSetChanged();
// Ask the adapter to refresh the ListView
//adapter.notifyDataSetChanged();
}
};//end of broadcast reciever