为什么Android CursorAdapter调用相同动作3次

问题描述 投票:0回答:1

我的CursorAdapter有问题,我必须用动态图像填充listView。

我有一个BBDD,其中一些字段的值为“1”或“0”。

在bindView中,当字段返回1时,我将图像添加到linearLayout。

问题是图像被添加了3次,我不知道为什么。

girlsFragmentAdapter:

public class girlsListFragmentCursoAdapter extends CursorAdapter {



public girlsListFragmentCursoAdapter(Context context, Cursor c) {
    super(context, c);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.girls_list_row,parent,false);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView girlName;
    ImageView imgExercice = new ImageView(context);
    LinearLayout linearImgRow = (LinearLayout) view.findViewById(R.id.exercices_list_row);

    girlName = view.findViewById(R.id.txtvwGirlName);
    if (cursor.getString(cursor.getColumnIndexOrThrow("pull_ups")).equals("1") ) {
        imgExercice.setImageResource(R.drawable.push_ups);
        linearImgRow.addView(imgExercice);
        Toast.makeText(context,"Pull ups: " +cursor.getString(cursor.getColumnIndexOrThrow("pull_ups")),Toast.LENGTH_SHORT ).show();
    }
    girlName.setText(cursor.getString(cursor.getColumnIndexOrThrow("nombre")));





}

}

当调用** OnActivityCreated时,我从Fragment **调用此适配器

girls_fragment

public class girls_fragment extends Fragment {

private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";




private String mParam1;
private String mParam2;
private WodDbAdapter mWodAdapter;
ListView lvWods;
private  View rootview;



public girls_fragment() {
    // Required empty public constructor
}

public static girls_fragment newInstance(String param1, String param2) {
    girls_fragment fragment = new girls_fragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }

}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    lvWods = (ListView) getView().findViewById(R.id.lvwGirlsList);
    mWodAdapter = new WodDbAdapter(getContext());
    mWodAdapter.open();
    fillData();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    rootview = inflater.inflate(R.layout.fragment_girls_fragment,container,false);

    return rootview;
}

private void fillData(){
    Cursor mGirlsCursor = mWodAdapter.fetchAllWods("girl");
    getActivity().startManagingCursor(mGirlsCursor);
    String [] from = new String[]{WodDbAdapter.KEY_NOMBRE,};
    int [] to = new int []{R.id.txtvwGirlName};

    girlsListFragmentCursoAdapter mGirlsAdapter = new girlsListFragmentCursoAdapter(rootview.getContext(),mGirlsCursor);

    lvWods.setAdapter(mGirlsAdapter);
}

}

结果是这样的:

enter image description here

如您所见,图像显示三次而不是一次

android android-cursoradapter
1个回答
1
投票

这是因为以下代码:

if (cursor.getString(cursor.getColumnIndexOrThrow("pull_ups")).equals("1") ) {
    imgExercice.setImageResource(R.drawable.push_ups);
    linearImgRow.addView(imgExercice);
    Toast.makeText(context,"Pull ups: " +cursor.getString(cursor.getColumnIndexOrThrow("pull_ups")),Toast.LENGTH_SHORT ).show();
}

使用以下行:

    linearImgRow.addView(imgExercice);

每次调用imgExercice时,你总是将linearImgRow添加到bindView

© www.soinside.com 2019 - 2024. All rights reserved.