Android WindowManager添加的视图上的ViewPager获取;java.lang.IllegalArgumentException:找不到id“的视图;
我正在实现一个照片查看器,它允许用户从缩略图以全屏模式查看照片。 我目前的做法是将膨胀视图添加到Android WindowManager添加的视图上的ViewPager获取;java.lang.IllegalArgumentException:找不到id“的视图;,android,android-fragments,android-viewpager,android-windowmanager,android-photos,Android,Android Fragments,Android Viewpager,Android Windowmanager,Android Photos,我正在实现一个照片查看器,它允许用户从缩略图以全屏模式查看照片。 我目前的做法是将膨胀视图添加到WindowManager。在充气视图中,有一个ViewPager允许用户切换图像。我得到了错误“java.lang.IllegalArgumentException:找不到id的视图” 以下是详细信息(视图在setActivity方法中膨胀,在openPhoto方法中为viewPager设置适配器): 这里调用了PhotoViewer的方法: public class PhotosFragment
WindowManager
。在充气视图中,有一个ViewPager
允许用户切换图像。我得到了错误“java.lang.IllegalArgumentException:找不到id的视图”
以下是详细信息(视图在setActivity方法中膨胀,在openPhoto方法中为viewPager设置适配器):
这里调用了PhotoViewer的方法:
public class PhotosFragment extends Fragment implements PhotoSupporter{
/*
....
*/
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
showLoading();
photosGridview = (GridView) findViewById(R.id.group_photos_gridview);
if (listPhotos == null) {
listPhotos = new ArrayList<Photo>();
}
photoListAdapter = new PhotoListAdapter(listPhotos, getActivity());
photosGridview.setAdapter(photoListAdapter);
photosGridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
PhotoViewer.getInstance().setParentActivity(getActivity());
PhotoViewer.getInstance().openPhoto(PhotosFragment.this, position);
}
});
}
@Override
public int getSize() {
return listPhotos == null ? 0 : listPhotos.size();
}
@Override
public Photo getPhotoItem(int position) {
return listPhotos.get(position);
}
}
这个问题有什么解决办法吗?非常感谢你们 我想你只是漏掉了一个小错误。而不是这个 viewPager=(viewPager)containerView.findViewById(R.id.photo\u viewer\u view\u pager) 做 viewPager=(viewPager)containerView.findViewById(R.id.photo\u viewer\u viewPager)
我认为您对viewpager使用了错误的id。希望它能解决您的问题。我想您只是错过了一个小错误。而不是这个 viewPager=(viewPager)containerView.findViewById(R.id.photo\u viewer\u view\u pager) 做 viewPager=(viewPager)containerView.findViewById(R.id.photo\u viewer\u viewPager)
我认为您对viewpager使用了错误的id。希望它能解决您的问题。我认为您在findviewById()之后在setParenActivity()中膨胀视图,这就是它无法获取视图的原因。我认为您在findviewById()之后在setParenActivity()中膨胀视图这就是它无法获取视图的原因。我认为这是因为您直接通过WindowManager添加了ViewPager。这样做意味着它将不属于正常活动视图层次结构的一部分(即装饰视图的子视图)<代码>活动。findViewById(以装饰视图作为根视图遍历视图)将无法找到您的ViewPager ViewPager适配器创建片段并使用ViewPager(id)作为容器。创建片段时,Android通过
Activity.findViewById
查找此容器,但无法找到它,因此引发此异常
听起来好像您需要某种显示在缩略图网格顶部的视图。您可以使用一个对话框(片段)来实现这一点。实现该视图的细节最好作为一个单独的问题提出。我认为这是因为您直接通过WindowManager添加ViewPager。这样做意味着它将不属于正常活动视图层次结构的一部分(即装饰视图的子视图)<代码>活动。findViewById(以装饰视图作为根视图遍历视图)将无法找到您的ViewPager ViewPager适配器创建片段并使用ViewPager(id)作为容器。创建片段时,Android通过
Activity.findViewById
查找此容器,但无法找到它,因此引发此异常
听起来好像您需要某种显示在缩略图网格顶部的视图。您可以使用一个对话框(片段)来实现这一点。实现该视图的具体细节最好作为一个单独的问题提出。发布logcat结果和问题@ρ∑ѕρєK你能看一下更新的问题吗?发布logcat结果和问题@ρ∑ѕρєK你能看一下更新的问题吗?对不起,这是我在StackOverFlow上的打字错误。你能看一下更新的问题吗?对不起,这是我在StackOverFlow上的打字错误。你能看一下更新的问题吗?不,我根本没有使用findViewById。不,我根本没有使用findViewById。我在深入android源代码后也发现了这一点。谢谢。嗨@antonyt,我刚根据您的建议更改了我的实现,但我遇到了一个非常棘手的问题。你能看一下吗:我在钻研安卓源码后也发现了。谢谢。嗨@antonyt,我刚根据您的建议更改了我的实现,但我遇到了一个非常棘手的问题。请你看一下:
public class PhotosFragment extends Fragment implements PhotoSupporter{
/*
....
*/
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
showLoading();
photosGridview = (GridView) findViewById(R.id.group_photos_gridview);
if (listPhotos == null) {
listPhotos = new ArrayList<Photo>();
}
photoListAdapter = new PhotoListAdapter(listPhotos, getActivity());
photosGridview.setAdapter(photoListAdapter);
photosGridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
PhotoViewer.getInstance().setParentActivity(getActivity());
PhotoViewer.getInstance().openPhoto(PhotosFragment.this, position);
}
});
}
@Override
public int getSize() {
return listPhotos == null ? 0 : listPhotos.size();
}
@Override
public Photo getPhotoItem(int position) {
return listPhotos.get(position);
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/photo_viewer_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/dark_background" >
</android.support.v4.view.ViewPager>
01-14 14:12:55.271: E/AndroidRuntime(11435): FATAL EXCEPTION: main
01-14 14:12:55.271: E/AndroidRuntime(11435): java.lang.IllegalArgumentException: No view found for id 0x7f0b00df (com.newsfeed.android:id/photo_viewer_view_pager) for fragment PhotoViewFragment{537b5ec4 #8 id=0x7f0b00df}
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.ja va:1088)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentSta tePagerAdapter.java:163)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.view.ViewPager.populate(ViewPager.java:1064)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.view.ViewPager.populate(ViewPager.java:911)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.View.measure(View.java:15172)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.View.measure(View.java:15172)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.View.measure(View.java:15172)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.Choreographer.doFrame(Choreographer.java:525)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.os.Handler.handleCallback(Handler.java:615)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.os.Handler.dispatchMessage(Handler.java:92)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.os.Looper.loop(Looper.java:137)
01-14 14:12:55.271: E/AndroidRuntime(11435): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-14 14:12:55.271: E/AndroidRuntime(11435): at java.lang.reflect.Method.invokeNative(Native Method)
01-14 14:12:55.271: E/AndroidRuntime(11435): at java.lang.reflect.Method.invoke(Method.java:511)
01-14 14:12:55.271: E/AndroidRuntime(11435): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-14 14:12:55.271: E/AndroidRuntime(11435): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-14 14:12:55.271: E/AndroidRuntime(11435): at dalvik.system.NativeStart.main(Native Method)