MyActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//list is global var
list = (MyListFragment) getFragmentManager().findFragmentById(com.myapp.R.id.mainActivity_myListFragment);
//add all objects to list
list.getListView().invalidateViews();
}
@Override
protected void onResume(){
super.onResume();
list.getListView().invalidateViews();
}
MyListFragment
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
MyAdapter adapter = new MyAdapter(new ArrayList());
setListAdapter(adapter);
}
public View getView(int position, View convertView, ViewGroup container) {
View view = super.getView(position, convertView, container);
TextView main = (TextView) view.findViewById(mylibs.common.R.list_main);
TextView sub = (TextView) view.findViewById(mylibs.common.R.list_sub);
ImageView image = (ImageView) view.findViewById(mylibs.common.R.list_image);
//set the View content here.
}
问题是,我无法正确显示第一次运行。但是,如果Android调用onResume()
,则所有内容都显示正常。我该如何解决这个问题?
列表中的第一项始终正确显示,只有列表的其余部分存在问题。
在getView()
之后立即调试onCreate()
时,它清楚地显示TextView和ImageView是由getView()
方法中我想要的数据设置的,但它不会显示而是显示显示我想要的数据时,它显示toString()
中String
Object
Adapter
的{{1}},其中一个TextView,其他所有文本都留空。
答案 0 :(得分:2)
你在这里做的一些事情很可能是问题的根源:
A)在您的Activity的onCreate()函数中,片段不会膨胀,因此您无法在那里访问它们。这里的最佳实践是在Fragment自己的onCreateView()生命周期回调期间访问/操作片段视图。这是他们在屏幕上充气之前的重点,所以这是一个完美的地方。您创建的活动和片段应相对独立。碎片应该可以重复使用。例如,如果你需要在X更多活动中使用这个片段,你会怎么做?
B)您的<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_floating_material_dark"
tools:context="com.contag.app.fragment.NavDrawerFragment">
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/toggle_selector"
android:background="@android:color/transparent"
android:gravity="center"
android:textOn="@null"
android:textOff="@null"
android:minHeight="0dp"
android:minWidth="0dp"
android:id="@+id/toggleButton"
android:layout_marginTop="26dp"
android:layout_marginStart="156dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="60"
android:textColor="@android:color/holo_green_dark"
android:textSize="15sp"
android:id="@+id/textView"
android:layout_alignLeft="@+id/toggleButton"
android:layout_alignTop="@+id/toggleButton"
android:layout_alignRight="@+id/toggleButton"
android:layout_alignBottom="@+id/toggleButton"
android:gravity="center" />
</RelativeLayout>
对我很怀疑。列表视图通常由xml中的getView()
视图组,适配器(由listview
实例化),列表视图将包含的对象的模型集合以及带有视图的单独xml定义。定义列表中的每个单元格。 onCreateView()
通常是一个覆盖 适配器的功能(使用视图持有者模式),您可以在其中访问并填充组成单独xml单元格的视图。
也许你已经正确设置了它,但是你给我们的内容并没有像它那样读取(适配器肯定不应该在片段getView()
中设置反正)。
答案 1 :(得分:-1)
Android是一个残骸,这是浪费时间。
我仍在寻找答案,但解决方法是创建一个新线程,休眠1毫秒,然后runonUIThread()
invalidateViews()
。