所以这是我的问题。
我正在研究 API 14,我在 Eclipse 的帮助下制作了一个“MasterDetailFlow”。在“双窗格”的左侧,我有一些文本视图和一个片段。(我做的很简单)
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal"
tools:context=".ListActivity" >
<RelativeLayout
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="27"
android:orientation="vertical" >
<TextView
android:text="toto"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="textView"/>
<fragment
android:id="@+id/fragment1"
android:name=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="button"
/>
</RelativeLayout>
//the right part of the screen, doesn't matter
<FrameLayout
/>
</LinearLayout>
Fragment 类是这样的
public class MyFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = null;
if (mItem != null) {
if(mItem.isTrue){
rootView = inflater.inflate(layout1, container, false);
}else{
rootView = inflater.inflate(layout2, container, false);
}
}
}
}
我使用 ArrayAdapter 在列表中动态添加项目。事情是:当列表不需要滚动时(列表的高度小于片段的高度),一切都以良好的方式显示。但是当列表更大(可见部分没问题)并且我滚动列表时,一些应该有 layout1 的项目有 layout2,反之亦然。这些项目奇怪地总是在交界处,就像隐藏的第一个元素一样。当您单击该项目时,它会正常运行。例如,应为 layout1(但显示为 layout2)的项目在单击时充当项目 layout1。我不知道它是否清楚,因为它不适合我:)
当我在 logcat 中打印片段中的字符串列表时,它的顺序很好。所以它看起来只是一个“显示错误”,但它来自哪里?
有没有人有类似的问题?知道问题吗?
谢谢。
编辑 :
这是我的自定义 ArrayAdapter。我没有getItemViewType 和getViewTypeCount 方法,我应该处理它。到目前为止,我一直在使用存储在 DummyItem 中的布尔值来了解它是类型 1 项目还是类型 2。
public class CustomArrayAdapter extends ArrayAdapter<DummyItem>
@Override
public View getView(int p_position, View p_convertView, ViewGroup p_parent) {
DummyItem item = data.get(p_position);
View row = p_convertView;
if(row==null){
if(item.isTrue){
LayoutInflater inflater = ((Activity)m_context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, p_parent, false);
row.setTag(item);
TextView label1 = (TextView) row.findViewById(textViewId);
label1.setText(item.content);
}else{
LayoutInflater inflater = ((Activity)m_context).getLayoutInflater();
row = inflater.inflate(R.layout.simple_list_item_activated_1_custom, p_parent, false);
TextView label2 = (TextView) row.findViewById(R.id.text1);
labelPiece.setText(item.content);
}
}else{
}
return row;
}
}