4

私はGridView10 行と 7 列の を持っています。の要素は、GridView1 つの行に 7 つの要素が含まれている、1 つの行に 4 つまたは 5 つの要素しかないなどの固有の形式ではありません。これで、GridView70 要素の完全な要素を持つ を作成しました。でいくつかの要素を非表示にしたいと思いますGridView。と の可視性を に設定してみImageViewましTextViewView.INVISIBLE。動作しますが、スクロールするGridViewとランダムに変化します。

  1. これはまさに私が欲しかったものです

  2. もう 1 つの問題は、各行に各要素のタイトルではなくタイトルが含まれていることです。

私がしなければならないこと?私はAndroidが初めてです。

コード:

@Override
public int getCount() 
{
    // TODO Auto-generated method stub
    return listFlag.size();
}

@Override
public String getItem(int position)
{
    // TODO Auto-generated method stub
    return listCountry.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

public static class ViewHolder
{
    public ImageView imgViewFlag;
    public TextView txtViewTitle;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder view;
    LayoutInflater inflator = activity.getLayoutInflater();
    int childSize = parent.getChildCount();
    if(convertView==null)
    {
        view = new ViewHolder();
        convertView = inflator.inflate(R.layout.gridview_row, null);
        view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);
        view.imgViewFlag  = (ImageView) convertView.findViewById(R.id.imageView1);
        convertView.setTag(view);
    }
    else
    {
        view = (ViewHolder) convertView.getTag();
    }

    if(position==64||position==57||position==58||position==59||position==50||position==23||position==16||position==17||position==9||position==10||position==12||position==1||position==2||position==8)
    {
        view.txtViewTitle.setVisibility(View.GONE);
        view.imgViewFlag.setVisibility(View.GONE);
    }

    view.txtViewTitle.setText(listCountry.get(position));
    view.imgViewFlag.setImageResource(listFlag.get(position));

    return convertView;
}

}
4

1 に答える 1

3

問題は、コード内の setVisibility 呼び出しにあります。

if(position==64||position==57||position==58||position==59||position==50||position==23||position==16||position==17||position==9||position==10||position==12||position==1||position==2||position==8)
{
    view.txtViewTitle.setVisibility(View.GONE);
    view.imgViewFlag.setVisibility(View.GONE);
}

必要ないときは GONE に設定しますが、必要なときに VISIBLE に設定しません。を GONE に設定すると、スクロール時に同じセルが再利用されます。その時点で、それらを VISIBLE に設定しないと、それらは表示されません。

if(position==64||position==57||position==58||position==59||position==50||position==23||position==16||position==17||position==9||position==10||position==12||position==1||position==2||position==8)
{
    view.txtViewTitle.setVisibility(View.GONE);
    view.imgViewFlag.setVisibility(View.GONE);
} else {
    view.txtViewTitle.setVisibility(View.VISIBLE);
    view.imgViewFlag.setVisibility(View.VISIBLE);
}

タイトルに関する 2 番目の部分に対処するには、タイトルの TextView を各セルに追加しますが、それが行の最初の項目である場合にのみ、可視性を VISIBLE に設定します。そうすれば、あまり多くのカスタム コードを作成する必要がなくなります。

お役に立てれば。

于 2013-05-08T07:27:50.837 に答える