ListView带有按钮simplecursoradapter

时间:2017-05-10 07:54:22

标签: android listview

我的应用中有一个标签式活动,有3个标签。在每个标签中,我都有一个用emcursoradapter填充的 listView 。我现在为所有 listView 的每一行添加了一个按钮。 如果没有按钮,我可以单击 listView 转到我的应用程序的另一个页面。但是现在我添加了Button,它已经不可能了。另外,对于我的按钮OnClick方法,我刚刚在mainActivity中添加了方法,它是否正常,是正确的还是应该以不同的方式进行?

所以:我希望能够点击我的listView转到某个页面并点击我的按钮转到另一个页面,我该怎么做?

这是我的list_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
    android:id="@+id/text_branche_cours"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="English"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=" - " />
<TextView
    android:id="@+id/text_designation"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Reading"
    />

<Button
    android:id="@+id/bAjouterJalon"
    android:layout_width="49dp"
    android:layout_height="29dp"
    android:layout_gravity="right"
    android:background="@drawable/ic_action_add_jalon"
    android:onClick="Add" />

我的一个标签的代码:

public class CoursActuel extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.activity_cours_actuel, container, false);

    //récupération de la base de donnees
    final DatabaseHelper dbhelper = new DatabaseHelper(getActivity());
    //creation d'un adapter et d'un listview
    final CustomAdapter adapter;
    final ListView lvCours;

    //récuperation de la listview à l'aide de son id
    lvCours =(ListView)rootView.findViewById(R.id.ListCours);
    //création d'un Cursor qui récupère ce que la requête créée dans le helper aura retournée
    Cursor cursor = dbhelper.getAllCoursActuel();
    //insertion des champs dans la colonne 'nom' dans une tableau
    String[] from = { "b.nom", "c.designation" };
    int[] to = { R.id.text_branche_cours, R.id.text_designation };
    //on crée un adapter qui contiendra le contenu de ce tableau
    adapter = new CustomAdapter(getContext(),R.layout.list_row,cursor,from,to);
    lvCours.setAdapter(adapter);
    //on implémente l'adapter à ma listview
    lvCours.setAdapter(adapter);
    //j'avertis que le contenu a été modifié
    adapter.notifyDataSetChanged();

          //ce listener permet de naviguer vers la page de modification de cours
    //en transferant toutes les données en lien avec le cours selectionné
    lvCours.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            //je créé un cursor par rapport au cours
            // et j'insère toutes les valeurs en lien avec ce cours
            Cursor cursor_modifier = (Cursor)adapter.getItem(position);
            Intent modifier = new Intent(getActivity(), ModifierCours.class);

            String date_debut= cursor_modifier.getString(1);
            String date_fin = cursor_modifier.getString(2);
            int diziemepoint = cursor_modifier.getInt(3);
            int demipoint =cursor_modifier.getInt(4);
            String description = cursor_modifier.getString(5);
            String designation = cursor_modifier.getString(6);
            int lundi = cursor_modifier.getInt(7);
            int mardi = cursor_modifier.getInt(8);
            int mercredi = cursor_modifier.getInt(9);
            int jeudi = cursor_modifier.getInt(10);
            int vendredi = cursor_modifier.getInt(11);
            int samedi = cursor_modifier.getInt(12);
            String selected_branche = cursor_modifier.getString(13);
            int id_branche = dbhelper.getBrancheID(selected_branche);
            //j'insère toutes les valeurs dans mon Intent, pour les récupérer après
            //a l'aide de la clé
            modifier.putExtra("idold",id_branche);
            modifier.putExtra("branche",selected_branche);
            modifier.putExtra("date_debut",date_debut);
            modifier.putExtra("date_derniercours",date_fin);
            modifier.putExtra("demipoint",demipoint);
            modifier.putExtra("dixiemepoint",diziemepoint);
            modifier.putExtra("description",description);
            modifier.putExtra("designation",designation);
            modifier.putExtra("lundi",lundi);
            modifier.putExtra("mardi",mardi);
            modifier.putExtra("mercredi",mercredi);
            modifier.putExtra("jeudi",jeudi);
            modifier.putExtra("vendredi",vendredi);
            modifier.putExtra("samedi",samedi);
            modifier.putExtra("ajout","listView");
            //je démarre l'activité
            startActivity(modifier);

        }
    });

    return rootView;


}

}

我的customAdapterClass

public class CustomAdapter extends SimpleCursorAdapter {



private Context mContext;
private Context appContext;
private int layout;
private Cursor cr;
private final LayoutInflater inflater;

public CustomAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
    super(context, layout, c, from, to);
    this.layout = layout;
    this.mContext = context;
    this.inflater = LayoutInflater.from(context);
    this.cr = c;
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return inflater.inflate(layout, null);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    super.bindView(view, context, cursor);



    Button btn = (Button) view.findViewById(R.id.bAjouterJalon);
    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(mContext, OngletJalonsNotes.class);
            mContext.startActivity(intent);
        }
    });
}

1 个答案:

答案 0 :(得分:1)

您应该{strong>移除 OnClick中的按钮Fragment,而不是将其添加到CustomAdapter

创建扩展CustomAdapter

SimpleCursorAdapter
 public class CustomAdapter extends SimpleCursorAdapter {

    private Context mContext;
    private Context appContext;
    private int layout;
    private Cursor cr;
    private final LayoutInflater inflater;

    public CustomAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
        this.layout = layout;
        this.mContext = context;
        this.inflater = LayoutInflater.from(context);
        this.cr = c;
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return inflater.inflate(layout, null);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);
        final int row_id = cursor.getInt(cursor.getColumnIndex("_id"));
        ...
        TextView tv_Name = (TextView) view.findViewById(R.id.text_branche_cours);
        ...
        Button btn = (Button) view.findViewById(R.id.bAjouterJalon);
        btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
              Intent intent = new Intent(context, ActivityB.class);
              startActivity(intent);
            }
        });
    }
}

CoursActuel 片段中,更改此行

adapter = new SimpleCursorAdapter(getContext(), R.layout.list_row, cursor, from, to, 0);

CustomAdapter adapter = new CustomAdapter(getContext(),R.layout.list_row, cursor, from, to, 0);
lvCours.setAdapter(adapter);

请参阅How can I set up button onclicklistner when using simple cursor adapter