我在StackOverflow上搜索了很多,并且在几条评论中建议清理项目来解决这个问题,问题出现在适配器的asynctask类中,所以:
没用!
我收到此错误的部分代码:
protected void onPreExecute() {
ImageView img = (ImageView) mView.findViewById(R.id.grid_action_button);
if(img == null){
Log.d(TAG, "img null");
}else{
Log.d(TAG, "img not null");
}
ProgressBar pBar = (ProgressBar) mView.findViewById(R.id.grid_progress_bar);
if(pBar == null){
Log.d(TAG, "pBar null");
}else{
Log.d(TAG, "pBar not null");
}
}
最有趣的是,imageview正常工作,但pBar
变量的返回为空。
Logcat结果:
04-02 15:46:00.734: D/Adapter(10842): img not null
04-02 15:46:00.734: D/Adapter(10842): pBar null
我的适配器到griview布局(mobile.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="30dp" >
<ImageView
android:id="@+id/grid_item_image"
android:layout_width="140dp"
android:layout_height="186dp"
android:layout_marginRight="20dp"
android:src="@drawable/ic_launcher" >
</ImageView>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<!-- I have some TextViews here -->
<ImageView
android:id="@+id/grid_action_button"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:src="@drawable/btn_download"
android:clickable="true" >
</ImageView>
<ProgressBar
android:id="@+id/grid_progress_bar"
android:layout_width="100dp"
android:layout_height="10dp"
style="style/Widget.ProgressBar.Horizontal"
/>
</LinearLayout>
</LinearLayout>
在主类中调用setContentView
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.gridview);
}
我的getview()
内部适配器类:
public View getView(int position, View convertView, ViewGroup parent) {
View gridView = convertView;
if (gridView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// get layout from mobile.xml
gridView = inflater.inflate(R.layout.mobile, null);
... more ...
由于
答案 0 :(得分:0)
也许这对某人有用。
从Firebase中获取数据后,我处于某种异步方法中,必须访问主屏幕上的进度栏。但是findViewById
始终返回null。
最后,我像这样解决了它:
AppCompatActivity mainActivity = (AppCompatActivity)context;
mainActivity.setContentView(R.layout.activity_main);
ProgressBar loadPollsProgressBar = (ProgressBar) mainActivity.findViewById(R.id.loadPollsProgressBar);