ListView控件onItemClickListener不起作用的Andr​​oid [英] ListView onItemClickListener does not work Android

查看:243
本文介绍了ListView控件onItemClickListener不起作用的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我见过很多帖子,大量的教程,但我找不到,使这项工作的关键。我有一个朋友请求列表视图,因为你看到这些要求有2个按钮(接受或拒绝),我想知道我怎么能知道被点击的按钮(目前它does not甚至可以告诉我,如果一个项目被点击)。

请帮忙,即时通讯一样绝望。

活动的继承人的code

 进口的java.util.ArrayList;
进口的java.util.HashMap;
进口的java.util.List;

进口org.apache.http.NameValuePair;
进口org.apache.http.message.BasicNameValuePair;
进口org.json.JSONArray;
进口org.json.JSONException;
进口org.json.JSONObject;

进口android.os.AsyncTask;
进口android.os.Bundle;
进口android.app.Activity;
进口android.app.ListActivity;
进口android.app.ProgressDialog;
进口android.view.Menu;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.AdapterView;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.ListAdapter;
进口android.widget.SimpleAdapter;
进口android.widget.ListView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.Toast;

公共类慰问延伸活动{
    私人ProgressDialog pDialog;
    私有静态最后弦乐SOLICITUDES_URL =htt​​p://192.168.56.1/webservice/cargarSolicitudes.php;
    JSONParser jsonParser =新JSONParser();
    私人的ListView LV;
    // JSON IDS:

    私有静态最后弦乐TAG_POSTS =上岗;

    私有静态最后弦乐TAG_USERNAME =用户名;
    私人的HashMap<字符串,字符串>用户;
    是SessionManager会议;

    //阵列CON洛杉矶吾友
    私人JSONArray mAmigos = NULL;
    // organiza洛杉矶吾友EN UNA LISTA。
    私人的ArrayList< HashMap的<字符串,字符串>> mAmigosList;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_solicitudes);
        LV =(ListView控件)findViewById(R.id.listViewSolicitudes);
        lv.setOnItemClickListener(新AdapterView.OnItemClickListener(){

            @覆盖
            公共无效onItemClick(适配器视图<>母公司视图中查看,
                    INT位置,长的id){
                // ListView中点击过
                INT itemPosition =位置;

                // ListView中点击过
                字符串itemValue =(字符串)lv.getItemAtPosition(位置);

                //显示警报
                Toast.makeText(
                        getApplicationContext(),
                        位置:+ itemPosition +列表项:
                                + itemValue,Toast.LENGTH_LONG).show();


            }
        });


    }

    私人无效updateList(){
        //段未ListActivity tenemos阙特纳名士表适配器。埃斯特
        // simpleAdapter
        //utilizaráNUESTRO ArrayList的哈希映射actualizado。 Utilizo
        // single_request.xml第
        // CADA项目EN LA LISTAŸ猩猩拉informaacióncorrecta第CADA ID。

        ListAdapter适配器=新SimpleAdapter(这一点,mAmigosList,
                R.layout.single_request,新的String [] {} TAG_USERNAME,
                新的INT [] {R.id.textViewAmigoUsuario});

        lv.setAdapter(适配器);

    }

    公共无效updateJSONdata(){
        //会话类实例
        会议=新SessionManager(中间getApplicationContext());
        //从会话的用户数据
        用户= session.getUserDetails();
        字符串username = user.get(SessionManager.KEY_USERNAME);
        名单<的NameValuePair> PARAMS =新的ArrayList<的NameValuePair>();
        params.add(新BasicNameValuePair(用户名,用户名));
        mAmigosList =新的ArrayList< HashMap的<字符串,字符串>>();

        JSONObject的JSON = jsonParser.makeHtt prequest(SOLICITUDES_URL,POST,
                PARAMS);

        //宽多parseamos JSON ES conveniente hacer未赶上德拉斯
        // excepciones

        尝试 {

            mAmigos = json.getJSONArray(TAG_POSTS);

            // Iterando对待办事项洛杉矶阙后第devuelve埃尔objeto JSON
            的for(int i = 0; I< mAmigos.length();我++){
                JSONObject的C = mAmigos.getJSONObject(我);

                // devuelve埃尔contenido德拉etiqueta
                字符串idUser1 = c.getString(TAG_USERNAME);

                // creando未索尔的HashMap
                HashMap的<字符串,字符串>图=新的HashMap<字符串,字符串>();

                map.put(TAG_USERNAME,idUser1);
                // map.put(TAG_ID2,idUser2);

                // agrego EL HashList人的ArrayList
                mAmigosList.add(图)

            }

        }赶上(JSONException E){
            e.printStackTrace();
        }
    }

    @覆盖
    公共无效onResume(){
        // TODO自动生成方法存根
        super.onResume();
        // cargando洛杉矶吾友一个través德AsynTask
        新buscarSolicitudes()执行();
    }

    公共类buscarSolicitudes扩展的AsyncTask<虚空,虚空,布尔> {

        @覆盖
        在preExecute保护无效(){
            super.on preExecute();
            pDialog =新ProgressDialog(getApplicationContext());
            pDialog.setMessage(Cargando慰问......);
            pDialog.setIndeterminate(假);
            pDialog.setCancelable(真正的);
        }

        @覆盖
        保护布尔doInBackground(虚空......为arg0){
            updateJSONdata();
            返回null;

        }

        @覆盖
        保护无效onPostExecute(布尔结果){
            super.onPostExecute(结果);
            pDialog.dismiss();
            updateList();
        }
    }


}
 

在activity_layout的code

 < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:后台=#FFFFFF
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:以下属性来=@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin
    工具:上下文=Buscar。>

    <的TextView
        机器人:ID =@ + ID / textViewSolicitudes
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentLeft =真
        机器人:layout_alignParentTop =真
        机器人:layout_margin =10dp
        机器人:重力=中心
        机器人:文本=@字符串/慰问
        机器人:文字颜色=@色/ AzulClaro/>


    <的ListView
        机器人:ID =@ + ID / listViewSolicitudes
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignLeft =@机器人:ID /空
        机器人:layout_below =@ ID / textViewSolicitudes
        工具:列表项=@布局/ single_request
        机器人:可聚焦=假
        机器人:descendantFocusability =blocksDescendants
        机器人:drawSelectorOnTop =真/>

< / RelativeLayout的>
 

而code有关single_request布局

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:后台=#F0F0F0
    机器人:方向=垂直>

    <的LinearLayout
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_margin =5DP
        机器人:方向=垂直>

        <的LinearLayout
            机器人:ID =@ + ID / boxSF1
            机器人:layout_width =match_parent
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_margin =2DP
            机器人:方向=横向>

            < ImageView的
                机器人:ID =@ + ID / imageUser
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:SRC =@可绘制/ perfildefecto/>

            < RelativeLayout的
                机器人:ID =@ + ID / boxSF2
                机器人:layout_width =match_parent
                机器人:layout_height =WRAP_CONTENT
                机器人:layout_margin =2DP
                机器人:方向=垂直
                机器人:填充=5DP>

                <的TextView
                    机器人:ID =@ + ID / textViewAmigoUsuario
                    机器人:layout_width =WRAP_CONTENT
                    机器人:layout_height =WRAP_CONTENT
                    机器人:layout_gravity =底
                    机器人:paddingBottom会=2DIP
                    机器人:以下属性来=5DP
                    机器人:paddingTop =6dip
                    机器人:文字颜色=#333
                    机器人:TEXTSIZE =16SP
                    机器人:TEXTSTYLE =黑体/>


                    <按钮
                        机器人:ID =@ + ID / btnEliminar
                        机器人:layout_width =20dp
                        机器人:layout_height =20dp
                        机器人:layout_alignParentRight =真
                        机器人:layout_below =@ + ID / textViewSolicitud
                        机器人:layout_marginTop =30dp
                        机器人:背景=@可绘制/ denegar
                        机器人:最大=100/>

                    <按钮
                        机器人:ID =@ + ID / btnAgregar
                        机器人:layout_width =20dp
                        机器人:layout_height =20dp
                        机器人:layout_alignBaseline =@ + ID / btnEliminar
                        机器人:layout_alignBottom =@ + ID / btnEliminar
                        机器人:layout_marginRight =24dp
                        机器人:layout_toLeftOf =@ + ID / btnEliminar
                        机器人:背景=@可绘制/ aceptar
                        机器人:最大=100/>

                    <的TextView
                        机器人:ID =@ + ID / textViewSolicitud
                        机器人:layout_width =WRAP_CONTENT
                        机器人:layout_height =WRAP_CONTENT
                        机器人:layout_centerHorizo​​ntal =真
                        机器人:layout_centerVertical =真
                        机器人:layout_below =@ ID / textViewAmigoUsuario
                        机器人:layout_margin =10dp
                        机器人:重力=左
                        机器人:文本=@字符串/ friend_request
                        机器人:文字颜色=@色/ AzulClaro/>

            < / RelativeLayout的>
        < / LinearLayout中>
    < / LinearLayout中>

< / LinearLayout中>
 

解决方案

onItemClicked 不是因为按钮名为,在你行的。添加

 安卓descendantFocusability =blocksDescendants
 

你的 single_request 布局的根目录

Ive seen plenty of posts, plenty of tutorials but i can't find the key to make this work. I have a listView with friend requests,as u see these requests have 2 buttons (accept or deny) and i want to know how can i know which button is clicked (At the moment it doesnt even works to tell me if an item is clicked).

Please help, im like desperate.

Heres the code of the Activity

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;

public class Solicitudes extends Activity {
    private ProgressDialog pDialog;
    private static final String SOLICITUDES_URL = "http://192.168.56.1/webservice/cargarSolicitudes.php";
    JSONParser jsonParser = new JSONParser();
    private ListView lv;
    // JSON IDS:

    private static final String TAG_POSTS = "posts";

    private static final String TAG_USERNAME = "username";
    private HashMap<String, String> user;
    SessionManager session;

    // array con los amigos
    private JSONArray mAmigos = null;
    // organiza los amigos en una lista.
    private ArrayList<HashMap<String, String>> mAmigosList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_solicitudes);
        lv = (ListView) findViewById(R.id.listViewSolicitudes);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // ListView Clicked
                int itemPosition = position;

                // ListView Clicked
                String itemValue = (String) lv.getItemAtPosition(position);

                // Show Alert
                Toast.makeText(
                        getApplicationContext(),
                        "Position :" + itemPosition + "  ListItem : "
                                + itemValue, Toast.LENGTH_LONG).show();


            }
        });


    }

    private void updateList() {
        // Para un ListActivity tenemos que tener un List Adapter. Este
        // simpleAdapter
        // utilizará nuestro ArrayList Hashmap actualizado. Utilizo
        // single_request.xml para
        // cada item en la lista y pongo la informaación correcta para cada ID.

        ListAdapter adapter = new SimpleAdapter(this, mAmigosList,
                R.layout.single_request, new String[] { TAG_USERNAME },
                new int[] { R.id.textViewAmigoUsuario });

        lv.setAdapter(adapter);

    }

    public void updateJSONdata() {
        // Session class instance
        session = new SessionManager(getApplicationContext());
        // get user data from session
        user = session.getUserDetails();
        String username = user.get(SessionManager.KEY_USERNAME);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username", username));
        mAmigosList = new ArrayList<HashMap<String, String>>();

        JSONObject json = jsonParser.makeHttpRequest(SOLICITUDES_URL, "POST",
                params);

        // cuando parseamos JSON es conveniente hacer un catch de las
        // excepciones

        try {

            mAmigos = json.getJSONArray(TAG_POSTS);

            // Iterando para todos los post que nos devuelve el objeto json
            for (int i = 0; i < mAmigos.length(); i++) {
                JSONObject c = mAmigos.getJSONObject(i);

                // devuelve el contenido de la etiqueta
                String idUser1 = c.getString(TAG_USERNAME);

                // creando un nuevo HashMap
                HashMap<String, String> map = new HashMap<String, String>();

                map.put(TAG_USERNAME, idUser1);
                // map.put(TAG_ID2, idUser2);

                // agrego el HashList al ArrayList
                mAmigosList.add(map);

            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        // cargando los amigos a través de AsynTask
        new buscarSolicitudes().execute();
    }

    public class buscarSolicitudes extends AsyncTask<Void, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(getApplicationContext());
            pDialog.setMessage("Cargando solicitudes...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
        }

        @Override
        protected Boolean doInBackground(Void... arg0) {
            updateJSONdata();
            return null;

        }

        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);
            pDialog.dismiss();
            updateList();
        }
    }


}

The code of the activity_layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Buscar" >

    <TextView
        android:id="@+id/textViewSolicitudes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_margin="10dp"
        android:gravity="center"
        android:text="@string/solicitudes"
        android:textColor="@color/AzulClaro" />


    <ListView 
        android:id="@+id/listViewSolicitudes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@android:id/empty"
        android:layout_below="@id/textViewSolicitudes"
        tools:listitem="@layout/single_request"
        android:focusable="false"
        android:descendantFocusability="blocksDescendants"
        android:drawSelectorOnTop="true" />

</RelativeLayout>

And the code about the single_request layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#f0f0f0"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/boxSF1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="2dp"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/imageUser"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/perfildefecto" />

            <RelativeLayout
                android:id="@+id/boxSF2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="2dp"
                android:orientation="vertical"
                android:padding="5dp" >

                <TextView
                    android:id="@+id/textViewAmigoUsuario"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:paddingBottom="2dip"
                    android:paddingLeft="5dp"
                    android:paddingTop="6dip"
                    android:textColor="#333"
                    android:textSize="16sp"
                    android:textStyle="bold" />


                    <Button
                        android:id="@+id/btnEliminar"
                        android:layout_width="20dp"
                        android:layout_height="20dp"
                        android:layout_alignParentRight="true"
                        android:layout_below="@+id/textViewSolicitud"
                        android:layout_marginTop="30dp"
                        android:background="@drawable/denegar"
                        android:max="100" />

                    <Button
                        android:id="@+id/btnAgregar"
                        android:layout_width="20dp"
                        android:layout_height="20dp"
                        android:layout_alignBaseline="@+id/btnEliminar"
                        android:layout_alignBottom="@+id/btnEliminar"
                        android:layout_marginRight="24dp"
                        android:layout_toLeftOf="@+id/btnEliminar"
                        android:background="@drawable/aceptar"
                        android:max="100" />

                    <TextView
                        android:id="@+id/textViewSolicitud"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_centerVertical="true"
                        android:layout_below="@id/textViewAmigoUsuario"
                        android:layout_margin="10dp"
                        android:gravity="left"
                        android:text="@string/friend_request"
                        android:textColor="@color/AzulClaro" />

            </RelativeLayout>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

解决方案

onItemClicked is not called because of the Button, in your row. Add

android:descendantFocusability="blocksDescendants"

to the root of your single_request layout

这篇关于ListView控件onItemClickListener不起作用的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆