Android如何在ListView的列表项中为Button设置onClick事件

时间:2016-05-13 10:07:54

标签: java android listview android-studio

我想在Button

的列表项中为ListView设置onclick事件

我有这样的布局("list_item.xml")

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">

<TableRow android:layout_width="fill_parent"
    android:id="@+id/TableRow_list_item"
    android:layout_height="wrap_content"
    android:gravity="center">

    <ImageView
        android:layout_width="0dp"
        android:layout_height="80dp"
        android:id="@+id/imageView_logo_utente"
        android:src="@drawable/icon_user_green"
        android:layout_column="1"
        android:layout_weight="1"/>

    <TextView
        android:textColor="#000000"
        android:id="@+id/nomec"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Nome Completo"
        android:layout_weight="2"
        android:gravity="center"
        android:height="40dp"
        android:textSize="17dp"
        android:layout_column="1"/>

    <TextView
        android:textColor="#000000"
        android:id="@+id/tiposogget"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Tipo Soggetto Etichetta"
        android:layout_weight="2"
        android:gravity="center"
        android:height="40dp"
        android:textSize="17dp"
        android:layout_column="1"/>

    <TextView
        android:textColor="#000000"
        android:id="@+id/cf"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Codice Fiscale"
        android:gravity="center"
        android:height="40dp"
        android:textSize="17dp"
        android:layout_column="1"
        android:layout_weight="2" />


    <TextView
        android:textColor="#000000"
        android:id="@+id/idsogg"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="ID Soggetto"
        android:layout_weight="1"
        android:gravity="center"
        android:height="40dp"
        android:textSize="17dp"
        android:layout_column="1"/>

    <Button
        android:layout_width="0dp"
        android:layout_height="90dp"
        android:id="@+id/button_scan"
        android:layout_column="1"
        android:layout_weight="0.63"
        android:height="140dp"
        android:background="@drawable/custom_button_scanner" />


</TableRow>

我以这种方式Activity

public class ActivityListview extends AppCompatActivity {

    //************VARIABILI GLOBALI*************

    ListView lv;

    static final String KEY_CF = "CodiceFiscale";
    static final String KEY_ID = "IDSoggetto";
    static final String KEY_NOMEC = "NomeCompleto";
    static final String KEY_TIPOSOGGET = "TipoSoggettoEtichetta";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_scanner);


        lv = (ListView) findViewById(R.id.listView_resultXML);


       Example();

    }



    public void Example() {
        ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

        // Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(this, menuItems,
                R.layout.list_item,
                new String[]{KEY_CF, KEY_ID, KEY_NOMEC, KEY_TIPOSOGGET}, new int[]{
                R.id.cf, R.id.idsogg, R.id.nomec, R.id.tiposogget});
        // selecting single ListView item
        ViewGroup headerview = (ViewGroup) getLayoutInflater().inflate(R.layout.header_listview, lv, false);
        lv.setAdapter(null);
        lv.addHeaderView(headerview);
        lv.setAdapter(adapter);


        // HERE I WOULD LIKE TO SET ONCLICK BUTTON



        // listening to single listitem click
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            //Metodo per prelevare dati al click sulla casella della ListView
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // getting values from selected ListItem
                String st_cf = ((TextView) view.findViewById(R.id.cf)).getText().toString();
                //String st_cognome = ((TextView) view.findViewById(R.id.cognome)).getText().toString();
                //String st_eliminato = ((TextView) view.findViewById(R.id.eliminato)).getText().toString();
                // String st_esterno = ((TextView) view.findViewById(R.id.esterno)).getText().toString();
                String st_idsogg = ((TextView) view.findViewById(R.id.idsogg)).getText().toString();
                //String st_nome = ((TextView) view.findViewById(R.id.nome)).getText().toString();
                String st_nomec = ((TextView) view.findViewById(R.id.nomec)).getText().toString();
                //String st_tiposogg = ((TextView) view.findViewById(R.id.tiposogg)).getText().toString();
                String st_tiposogget = ((TextView) view.findViewById(R.id.tiposogget)).getText().toString();
                Toast.makeText(ActivityListview.this, "Example onclick", Toast.LENGTH_LONG).show();

            }
        });
    }
}

如何在Button的列表项中为Activity设置onClick事件?

2 个答案:

答案 0 :(得分:0)

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)     getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.puzzles_row, null);
        }
        ListedPuzzle lp = items.get(position);
        if (lp != null) {
            TextView title = (TextView) v.findViewById(R.id.listTitles);
            //set as the tag the position parameter 
            title.setTag(new Integer(position));                    
            title.setOnclickListener(new OnCLickListener(){

            @Override 
            public void onClick(View v) {
                // Do the stuff you want for the case when the row TextView is clicked
                // you may want to set as the tag for the TextView the position paremeter of the `getView` method and then retrieve it here
                Integer realPosition = (Integer) v.getTag();
                // using realPosition , now you know the row where this     TextView was clicked
            }
        }); 
            title.setText(lp.getTitle());
            CheckBox star = (CheckBox) v.findViewById(R.id.star_listed);
            star.setChecked(lp.isStarred());
        }
        return v;
    }

以上面的例子作为修改

答案 1 :(得分:0)

一种可能性:您可以在自定义适配器中设置侦听器,然后创建在单击按钮时调用的接口。