2

カスタムのリストビューがあり、最初の項目の左側にプラス アイコンを表示したいと考えています。最初のアイテムのみ!

カスタム アダプタを getView() メソッドに記述し、次のような if 条件を使用しました。

If position == 0

imgicon.setvisibility=0;

}

else

{
imgicon.setvisibility=1;
}

しかし、リストを上下にスクロールすると、最初のアイテムにアイコンが表示されるだけでなく、いくつかのランダムなアイテムにもそのアイコンが表示されます。なにが問題ですか?これはバグですか?

編集:言うまでもなく、行を削除すると: imgicon.setvisibility==0、すべてのアイコンが消えます。

編集:

ここに私のカスタム配列アダプターがあります:

public class Projects_list_custom_array extends ArrayAdapter<Project_Detail> implements
    Filterable {
private final Object mLock = new Object();
private ItemsFilter mFilter;
public ArrayList<Project_Detail> mItems;
private ArrayList<Project_Detail> objects;

public Projects_list_custom_array(Context context, int textViewResourceId,
        ArrayList<Project_Detail> objects) {
    super(context, textViewResourceId, objects);
    this.objects = objects;
    this.mItems = new ArrayList<Project_Detail>(objects);
}

public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.activity_placeholder_projects_list,
                null);
    }

    Project_Detail i = objects.get(position);

    if (i != null) {

        TextView tt = (TextView) v
                .findViewById(R.id.projects_list_first_placeholder);

        RelativeLayout projects_list_layout = (RelativeLayout)v.findViewById(R.id.projects_list_placeholder_layout);

        if (tt != null) {
            tt.setText(i.get_projectname() + " " + position);
        }

        if (position == 0) {

            ImageView imgv = new ImageView(getContext());
            imgv.setImageResource(R.drawable.project_add);
            projects_list_layout.addView(imgv);


        }


    }

    return v;

}

/* ... */
@Override
public int getCount() {
    return objects.size();
}

@Override
public Project_Detail getItem(int position) {
    return objects.get(position);
}
4

3 に答える 3

2

レイアウトに ImageView を動的に追加する代わりに、それを xml レイアウトの一部にして、その可視性を操作する必要があります。

したがって、レイアウトに追加したと仮定すると、コードのその部分は次のようになります-

ImageView iv = (ImageView) v.findViewById(R.id.some_id);
if(position == 0)
      iv.setVisibility(View.VISIBLE);
else
      iv.setVisibility(View.GONE);

アダプターはビューを再利用するため、else 部分は重要です。これが、「プラス」アイコンが付いたランダムな要素があった理由です

于 2013-07-03T09:10:48.900 に答える
0

実物を見せていただけますかJava / XML files?

ただし、基本的な考え方は次のとおりです。最初に XML( R.layout.activity_placeholder_projects_list) ファイルに追加imagebuttonしてから、Java で使用します 。if(position==0){//set visibility to Visible}else{//set visibility to gone}. in getview().

于 2013-06-19T13:50:47.617 に答える
0

OK、ここで何が問題なのかを理解するために、完全なコードを確認する必要があります。実際のJava / XMLファイルを見せてもらえますか?

まず、リスト アイテムの可視性のデフォルト値は何ですか? プラス ボタンがデフォルトで View.GONE に設定されていること、およびリスト項目が View.VISIBLE に設定されていることを確認します。

次に、リスト アイテムごとに同じビューを複製していますか? すべての imgicon が同じ ID を持っているということですか? おそらく、プログラムで imgicon を最初のリスト要素に挿入し、最初のリスト要素のみに挿入する必要があります。

于 2013-06-14T02:36:43.823 に答える