2013-04-15 40 views
0

更新 建议我已将数据视图持有者添加到我的代码中,但仍面临同样的问题。 我编辑了我的问题,我的代码请看看。混淆自定义列表视图的行位置编号

我想显示根据排number.I要显示在第一排和第二排左侧火车头,反之亦然右手火车头我的列表视图2视图。

要有反之亦然行视图改变我把if条件和MOD%2 == 0检查位置,甚至比否则奇数..但是当我启动应用程序,我得到确切左右左右视图但是,当我向下滚动我陆续得到了两个右侧列车引擎排。

这里是代码

public LazyAdapter(Activity a, ArrayList<String> songsList) { 
    activity = a; 
    data=songsList; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
public int getCount() { 
    Log.d("Listview","Count is"+data.size()); 
    return data.size(); 
} 
public Object getItem(int position) { 
    return position; 
} 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    Log.d("position is - ", "position is "+position); 
    if(position%2==0) 
    { 
    return 0; 
    } 
    else 
    { 
    return 1; 
    } 

} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    int type = getItemViewType(position); 
    System.out.println("getView " + position + " " + convertView + " type = " + type); 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     switch (type) { 
      case 0: 
       convertView = inflater.inflate(R.layout.list_row1, null); 
       holder.caption = holder.caption = ((ImageView)convertView.findViewById(R.id.train).findViewById(R.id.boogi1).findViewById(R.id.imageView1)); 
       break; 
      case 1: 
       convertView = inflater.inflate(R.layout.list_row2, null); 
       holder.caption = holder.caption = ((ImageView)convertView.findViewById(R.id.train2).findViewById(R.id.boogi2).findViewById(R.id.imageView1)); 
       break; 
     } 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder)convertView.getTag(); 
    } 

    return convertView; 
} 

static class ViewHolder { 
    ImageView caption; 

    } 

List_row1.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="500dp" 
android:background="@drawable/list_selector" 
android:orientation="horizontal" 
android:padding="5dip" > 
<include android:id="@+id/mainview" layout="@layout/activity_main" /> 

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal"> 
<HorizontalScrollView 
    android:id="@+id/horizontalScrollView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
    <include android:id="@+id/train" layout="@layout/train" /> 
</HorizontalScrollView> 

train.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal"> 
    <include android:id="@+id/boogi1" layout="@layout/boogi" /> 
    <include android:id="@+id/boogi2" layout="@layout/boogi" /> 
    <include android:id="@+id/engine" layout="@layout/engine" /> 

在Train2.xml包含标记顺序被改变。

+1

'list_row2'和'list_row1'如何不同于不同的背景? –

+0

是在list_row 1具有2包括标签和比具有第一火车引擎图像视图中list_row2列车引擎的和后一个图像认为2包括在线性布局,但取向标签是水平.. –

回答

1
不使用 View Holder以持有的观点,因为当我们滚动列表,持有人应该在那里举行 inflated查看

....

充气视图初始化查看支架再后做你的东西在里面。

0

if(convertView==null)可能会在这里给你造成的问题。

目前,您的代码检查哪个视图的使用只限于检查时convertView = NULL。在你的情况下,convertView可能不是空的,因此它重复使用相同的视图几次,直到convertView再次为空(可能是因为滚动)。

请尝试将该部分取出并重试。

+0

我删除它,它现在的工作完美..但消除这种情况在未来会导致任何问题? –

+0

快速滚动时可能会导致内存问题。通过将两个必需的“视图”转换为字段,并且不断重复使用这些视图,而不是一次又一次地增加其布局,你几乎可以解决这个问题。 –

+0

对不起,我不明白它..因为我是初学者,请你详细解释一下吗? –

0

如mahaveermuttha和帕雷什mayani建议使用viewholder和adilsoomra指出,我忘了加getViewTypeCount();它解决了我的问题