- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:
通过更多的探索,我几乎可以肯定问题是当我在我的 FragmentActivity
中膨胀布局时的 onCreate() 方法,在 ViewPager 中有不同的 View 膨胀。因此,当我尝试使用 xml1.findViewById()
访问它们时它看着不同的 View 。如何访问 ViewPager
中使用的 View ?查看我的 FragmentPagerAdapter
看起来 fragment 每次超过 1 次滑动时都会被创建为新对象。我希望所有 4 个 View 都初始化一次。然后每次调用updateUI
四个 View 同时改变。所以我可以在新更新的所有四个 View 之间滑动。
我尝试使用 pagerAdapter.getItem(index).getView().findViewById( )
, 但它返回 NullPointerException
.得到异常后,我尝试覆盖 getView()
我的 Fragment
中的方法类。我在方法中输入的只是return view;
,其中 view 是 onCreateView
中返回的 View 的保存实例方法。这导致我的 ViewPager 显示 4 个空白屏幕可以在它们之间滑动。
我添加了我的 FragmentPagerAdapter
实现到问题的底部。
结束编辑
我试图实现 ViewPager
通过使用 Fragments
.我得到了非常奇怪的结果。
private TextView view1a, view1b;
private TextView view2a, view2b;
private TextView view3a, view3b;
private TextView view4a, view4b;
private Spinner spinner1, spinner2, spinner3, spinner4;
private Checkbox check1, check2, check3, check4;
private ViewPager mViewPager;
private View xml1, xml2, xml3, xml4;
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.main_page );
mViewPager = (ViewPager) findViewById( R.id.pager );
FragmentManager fm = getSupportFragmentManager();
MoreParmsFragmentPagerAdapter pagerAdapter = new MoreParmsFragmentPagerAdapter(fm);
xml1 = LayoutInflater.from( getBaseContext()).inflate( R.layout.xml1, null );
xml2 = LayoutInflater.from( getBaseContext()).inflate( R.layout.xml2, null );
xml3 = LayoutInflater.from( getBaseContext()).inflate( R.layout.xml3, null );
xml4 = LayoutInflater.from( getBaseContext()).inflate( R.layout.xml4, null );
populateSpinners();
updateUI();
}
public void populateSpinners() {
array1Adapter = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item, res.getStringArray( R.array.array1 ) );
array1Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1 = (Spinner) xml1.findViewById(R.id.spinner1);
spinner1.setAdapter(array1Adapter);
array2Adapter = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item, res.getStringArray( R.array.array2 ) );
array2Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2 = (Spinner) xml2.findViewById(R.id.spinner2);
spinner2.setAdapter(array2Adapter);
array3Adapter = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item, res.getStringArray( R.array.array3 ) );
array3Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner3 = (Spinner) xml3.findViewById(R.id.spinner3);
spinner3.setAdapter(array3Adapter);
array4Adapter = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item, res.getStringArray( R.array.array4 ) );
array4Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner4 = (Spinner) xml4.findViewById(R.id.spinner4);
spinner4.setAdapter(array4Adapter);
}
public void updateUI() {
view1a = (TextView) xml1.findViewById( R.id.view_one_a );
view1b = (TextView) xml1.findViewById( R.id.view_one_b );
view2a = (TextView) xml2.findViewById( R.id.view_two_a );
view2b = (TextView) xml2.findViewById( R.id.view_two_b );
view3a = (TextView) xml3.findViewById( R.id.view_three_a );
view3b = (TextView) xml3.findViewById( R.id.view_three_b );
view4a = (TextView) xml4.findViewById( R.id.view_four_a );
view4b = (TextView) xml4.findViewById( R.id.view_four_b );
// There is work done here to determine what to set
// the different TextViews' text to.
//
// `view**.setText()` is called for all views above with their respective values.
spinner1 = (Spinner) xml1.findViewById( R.id.spinner1 );
spinner2 = (Spinner) xml2.findViewById( R.id.spinner2 );
spinner3 = (Spinner) xml3.findViewById( R.id.spinner3 );
spinner4 = (Spinner) xml4.findViewById( R.id.spinner4 );
// There is work done here to determine what index the Spinners
// should have selected.
//
// `Spinner.setSelection( index ) is called on all spinners.
check1 = (CheckBox) xml1.findViewById( R.id.check1 );
check2 = (CheckBox) xml2.findViewById( R.id.check2 );
check3 = (CheckBox) xml3.findViewById( R.id.check3 );
check4 = (CheckBox) xml4.findViewById( R.id.check4 );
// There is work done here to determine whether or not
// to check the CheckBoxes.
//
// CheckBox.setChecked() is called for all checkboxes.
}
}
Fragment
的示例类:
public class xmlOneFragment extends Fragment {
int mCurrentPage;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/** Getting the arguments to the Bundle object */
Bundle data = getArguments();
/** Getting integer data of the key current_page from the bundle */
mCurrentPage = data.getInt("current_page", 0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.xml1, container,false);
return v;
}
}
Spinners
永远不会被其对应的数组填充。有
LogCat
在我的
populateSpinners()
中调用电话显示我期望的方法,但是
Spinners
自己没有人口。
updateUI()
中出现问题方法。所有
findViewById()
下面的评论调用是我进行某些计算以确定要放入
TextViews
中的文本的地方。 ,设置什么索引
Spinners
到,以及是否检查
CheckBoxes
.我有
LogCat
调用显示找到的值,它们都是预期的。
.setText(), .setSelection(), and .setChecked()
方法被调用,没有显示错误,但根本没有设置任何项目。一切都保持空白。
TextViews
现在都有唯一的 ID。当我第一次尝试实现这个
ViewPager
, 我有
updateUI()
方法处理没有
xml*.
的 TextViews
findViewById()
的前缀来电。
view1a = (TextView) findViewById( R.id.view_one_a );
view1b = (TextView) findViewById( R.id.view_one_b );
view2a = (TextView) findViewById( R.id.view_two_a );
view2b = (TextView) findViewById( R.id.view_two_b );
view3a = (TextView) findViewById( R.id.view_three_a );
view3b = (TextView) findViewById( R.id.view_three_b );
view4a = (TextView) findViewById( R.id.view_four_a );
view4b = (TextView) findViewById( R.id.view_four_b );
// There is work done here to determine what to set
// the different TextViews' text to.
view**.setText( whatever );
NullPointerException
, 但仅在调用
.setText()
时与
TextViews
在第三页和第四页。前两页没有抛出任何异常。所以我把第三页和第四页注释掉了。程序运行,前两页在正确的 TextView 中显示了正确的值。然后我尝试添加
xml*.
到
findViewById()
方法,现在没有抛出异常,但根本没有更新 View 。
ViewPager
功能正常,我可以很好地在正确的布局之间滑动。当我尝试使用我想要的值更新 View 时会出现问题。我假设这个问题与我如何膨胀布局有关,或者我如何做太多次。第三个问题真的让我很困惑。我找不到第一页/第二页和第三/第四页之间的任何区别,但它们显然表现不同。此外,显示的第一个代码块表示为
Activity
,第二个代码块我切换到
FragmentActivity
.
public class MoreParmsFragmentPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 4;
public MoreParmsFragmentPagerAdapter( FragmentManager fm ) {
super(fm);
}
public Fragment getItem( int arg0 ) {
if( arg0 == 0 ) {
xmlOneFragment xml1Frag = new xmlOneFragment();
Bundle data = new Bundle();
data.putInt( "current_page", arg0 );
xmlOneFrag.setArguments( data );
return xmlOneFrag;
} else if( arg0 == 1 ) {
xmlTwoFragment xml2Frag = new xmlTwoFragment();
Bundle data = new Bundle();
data.putInt( "current_page", arg0 );
xmlTwoFrag.setArguments( data );
return xmlTwoFrag;
} else if( arg0 == 2 ) {
xmlThreeFragment xml3Frag = new xmlThreeFragment();
Bundle data = new Bundle();
data.putInt( "current_page", arg0 );
xmlThreeFrag.setArguments( data );
return xmlThreeFrag;
} else {
xmlFourFragment xml4Frag = new xmlFourFragment();
Bundle data = new Bundle();
data.putInt( "current_page", arg0 );
xmlFourFrag.setArguments( data );
return xmlFourFrag;
}
}
@Override
public CharSequence getPageTitle(int position) {
if( position == 0 ) {
return "xml1";
} else if( position == 1 ){
return "xml2";
} else if( position == 2 ) {
return "xml3";
} else {
return "xml4";
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return PAGE_COUNT;
}
}
private ViewPager mViewPager;
private MoreParmsFragmentPagerAdapter pagerAdapter;
private FragmentManager fm;
private AntiPumpFragment apFrag;
private RelaxedCloseFragment relFrag;
private MiscParmsFragment miscFrag;
private DNP3Fragment dnpFrag;
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
mViewPager = (ViewPager) findViewById( R.id.pager );
fm = getSupportFragmentManager();
pagerAdapter = new MoreParmsFragmentPagerAdapter(fm);
mViewPager.setAdapter( pagerAdapter );
apFrag = (AntiPumpFragment) fm.findFragmentByTag( "android:switcher:" + R.id.pager + ":0" );
relFrag = (RelaxedCloseFragment) fm.findFragmentByTag( "android:switcher:" + R.id.pager + ":1" );
miscFrag = (MiscParmsFragment) fm.findFragmentByTag( "android:switcher:" + R.id.pager + ":2" );
dnpFrag = (DNP3Fragment) fm.findFragmentByTag( "android:switcher:" + R.id.pager + ":3" );
ViewPager
在我的屏幕上正确显示,我可以干净地在所有四个 View 之间滑动。但是,我所有的
if( apFrag != null )
语句总是被跳过。
最佳答案
The FIRST problem is that the Spinners are never filled with their corresponding Arrays. There are LogCat calls throughout my populateSpinners() method that show me what I expect, but the Spinners themselves are not populated.
Spinners
初始化,因为,而不是连接到来自
Fragments
的 View 的
ViewPager
,您只需使用
LayoutInflater
给
充气新 View 来自
Fragments
中使用的布局文件.初始化这个新 View 的 subview 不会显示任何视觉结果,因为它在
Activity
的 UI 中不存在/显示。 ,它正在“ float ”周围等待您将其附加到
ViewGroup
在
Activity
所以它可以显示它有什么 View 。
The SECOND problem arises in the updateUI() method. The comments below all of the findViewById() calls are where I do certain calculations to determine what text to put in the TextViews, what index to set the Spinners to, and whether or not to check the CheckBoxes. I have LogCat calls showing the values found, and they are all what is expected. When the .setText(), .setSelection(), and .setChecked() methods are called, no errors are shown, but none of the items are set at all. Everything stays blank.
View
等级制度。
The THIRD problem is what is confusing me the most. The TextViews now all have unique IDs. When I first tried implementing this ViewPager, I had the updateUI() method deal with TextViews without the xml*. prefix to the findViewById() calls.[...]This method resulted in a NullPointerException, but only when calling .setText() with the TextViews on the THIRD and FOURTH page. The first two pages did not throw any exceptions
ViewPager
,除了允许左右滑动之外,还设计了(通过适配器)以允许使用尽可能少的 View (例如
ListView
,它只为可见行增加行)。为此,它只构建一定数量的页面。默认情况下,此页数为 3(可见的一页 + 每侧一页,因此滑动将平滑)和
ViewPager
将在您向前或向后滑动时开始加载其他页面。当您启动
ViewPager
它将加载第一页(可见页)+ 下一页(在右侧),以便用户可以立即滑动。其他两个页面没有加载以提高效率,尝试从它们访问小部件将抛出
NullPointerException
因为他们找不到。最后,如果用户可能根本看不到这些页面,那么您最终不应该做不必要的工作。现在,您可以修改
ViewPager
的页数了。创建并保存在内存中(使用
setOffscreenPageLimit()
并提供一个数字),但你应该尽量避免它以提高效率,因为这会一次加载内存中的所有小部件(在你的情况下,这可能不会那么糟糕,但是我不知道你想做什么)。
I tried using pagerAdapter.getItem(index).getView().findViewById( ), but it returns a NullPointerException. After I got the exception, I tried overriding the getView() method in my Fragment classes. All I put in the method was return view;, where view was a saved instance of the View returned in the onCreateView method. This resulted in my ViewPager showing 4 blank screens to swipe between.
geItem()
适配器的方法,因为这不会返回
Fragment
ViewPager
当前使用的实例,它将返回
新
Fragment
那只是实例化。因为它只是实例化而不附加到
Activity
, 它的
getView()
方法不会返回 View 。
How can I access the views that are being used in the ViewPager?
ViewPager
上设置适配器时数据是否可用然后只需将初始化移动到
Fragments
在
onCreateView
或
onActivityCreated
方法。
Fragment
来自
ViewPager
你可以使用一个小技巧,知道
ViewPager
添加(暂时)
Fragments
在
FragmentManager
带有
android:switcher:theIdOfTheViewPager:thePositionInTheViewPager
形式的特殊标签.例如,要访问第一个
Fragment
的
ViewPager
:
xmlOneFragment first = (xmlOneFragment)getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":0");
// if the fragment is found and its view is available do stuff
if (first != null && first.getView() != null) {
// do stuff
}
ViewPager
有更多的了解为止。 .
关于android - 实现 Fragment 和 ViewPager 后无法编辑某些 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14244172/
背景: 我最近一直在使用 JPA,我为相当大的关系数据库项目生成持久层的轻松程度给我留下了深刻的印象。 我们公司使用大量非 SQL 数据库,特别是面向列的数据库。我对可能对这些数据库使用 JPA 有一
我已经在我的 maven pom 中添加了这些构建配置,因为我希望将 Apache Solr 依赖项与 Jar 捆绑在一起。否则我得到了 SolarServerException: ClassNotF
interface ITurtle { void Fight(); void EatPizza(); } interface ILeonardo : ITurtle {
我希望可用于 Java 的对象/关系映射 (ORM) 工具之一能够满足这些要求: 使用 JPA 或 native SQL 查询获取大量行并将其作为实体对象返回。 允许在行(实体)中进行迭代,并在对当前
好像没有,因为我有实现From for 的代码, 我可以转换 A到 B与 .into() , 但同样的事情不适用于 Vec .into()一个Vec . 要么我搞砸了阻止实现派生的事情,要么这不应该发
在 C# 中,如果 A 实现 IX 并且 B 继承自 A ,是否必然遵循 B 实现 IX?如果是,是因为 LSP 吗?之间有什么区别吗: 1. Interface IX; Class A : IX;
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在阅读标准haskell库的(^)的实现代码: (^) :: (Num a, Integral b) => a -> b -> a x0 ^ y0 | y0 a -> b ->a expo x0
我将把国际象棋游戏表示为 C++ 结构。我认为,最好的选择是树结构(因为在每个深度我们都有几个可能的移动)。 这是一个好的方法吗? struct TreeElement{ SomeMoveType
我正在为用户名数据库实现字符串匹配算法。我的方法采用现有的用户名数据库和用户想要的新用户名,然后检查用户名是否已被占用。如果采用该方法,则该方法应该返回带有数据库中未采用的数字的用户名。 例子: “贾
我正在尝试实现 Breadth-first search algorithm , 为了找到两个顶点之间的最短距离。我开发了一个 Queue 对象来保存和检索对象,并且我有一个二维数组来保存两个给定顶点
我目前正在 ika 中开发我的 Python 游戏,它使用 python 2.5 我决定为 AI 使用 A* 寻路。然而,我发现它对我的需要来说太慢了(3-4 个敌人可能会落后于游戏,但我想供应 4-
我正在寻找 Kademlia 的开源实现C/C++ 中的分布式哈希表。它必须是轻量级和跨平台的(win/linux/mac)。 它必须能够将信息发布到 DHT 并检索它。 最佳答案 OpenDHT是
我在一本书中读到这一行:-“当我们要求 C++ 实现运行程序时,它会通过调用此函数来实现。” 而且我想知道“C++ 实现”是什么意思或具体是什么。帮忙!? 最佳答案 “C++ 实现”是指编译器加上链接
我正在尝试使用分支定界的 C++ 实现这个背包问题。此网站上有一个 Java 版本:Implementing branch and bound for knapsack 我试图让我的 C++ 版本打印
在很多情况下,我需要在 C# 中访问合适的哈希算法,从重写 GetHashCode 到对数据执行快速比较/查找。 我发现 FNV 哈希是一种非常简单/好/快速的哈希算法。但是,我从未见过 C# 实现的
目录 LRU缓存替换策略 核心思想 不适用场景 算法基本实现 算法优化
1. 绪论 在前面文章中提到 空间直角坐标系相互转换 ,测绘坐标转换时,一般涉及到的情况是:两个直角坐标系的小角度转换。这个就是我们经常在测绘数据处理中,WGS-84坐标系、54北京坐标系
在软件开发过程中,有时候我们需要定时地检查数据库中的数据,并在发现新增数据时触发一个动作。为了实现这个需求,我们在 .Net 7 下进行一次简单的演示. PeriodicTimer .
二分查找 二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值key,然后将其先和数组中间的比较,如果key大于中间值,进行下一次mid后面的比较,直到找到相等的,就可以得到它的位置。
我是一名优秀的程序员,十分优秀!