Android 如何在GridView中获取TextView项
我有一个用户可以选择的数字列表。一旦选择了一个号码,我想保存该号码的选定状态,并能够在应用程序重新启动时恢复这些号码的状态 当前,调用Android 如何在GridView中获取TextView项,android,gridview,state,Android,Gridview,State,我有一个用户可以选择的数字列表。一旦选择了一个号码,我想保存该号码的选定状态,并能够在应用程序重新启动时恢复这些号码的状态 当前,调用onCreateView时,我很难让GridView中的项恢复其状态。我尝试调用gridView.getChildCount(),我注意到它返回0。我读过很多关于类似问题的帖子,并尝试过他们的答案,但都没有成功。我已经做了几天了 Fragment1.java: public class Fragment1 extends Fragment implements O
onCreateView
时,我很难让GridView中的项恢复其状态。我尝试调用gridView.getChildCount()
,我注意到它返回0。我读过很多关于类似问题的帖子,并尝试过他们的答案,但都没有成功。我已经做了几天了
Fragment1.java:
public class Fragment1 extends Fragment implements OnItemClickListener {
public static final String ARG_SECTION_NUMBER = "section_number";
private static final int START_NUM = 1;
private static final int END_NUM = 59;
public static boolean[] num_select = new boolean[END_NUM - START_NUM + 1];
private static GridView gridView;
private static NumberAdapter adapter;
public Fragment1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_1, container, false);
gridView = (GridView) rootView.findViewById(R.id.gridview_number);
adapter = new NumberAdapter(getActivity(), START_NUM, END_NUM);
gridView.setAdapter(adapter);
//gridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE);
gridView.setOnItemClickListener((OnItemClickListener) this);
// ************* I NEED TO BE ABLE TO RESTORE THE NUMBER STATE HERE *******
//restoreNumbers();
return rootView;
}
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
num_select[position] = !num_select[position];
if (num_select[position])
{
v.getBackground().setColorFilter(Color.rgb(210, 230, 230),
}
else
{
v.getBackground().clearColorFilter();
}
}
}多亏了这一点,我才找到了答案。 基本上,您需要创建一个addOnGlobalLayoutListener,并在GridView绘制完成后调用getChildAt。如果调用太早,它将返回null视图
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
TextView textView = (TextView) gridView.getChildAt(i);
textView.getBackground().setColorFilter(Color.rgb(210, 230, 230), PorterDuff.Mode.MULTIPLY);
}
});
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
TextView textView = (TextView) gridView.getChildAt(i);
textView.getBackground().setColorFilter(Color.rgb(210, 230, 230), PorterDuff.Mode.MULTIPLY);
}
});