ListView控件不听的onClick [英] ListView doesn't listen to onClick

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

问题描述

我试图做一个ListView当我调用该函数actualizarDisplay它可以刷新()。
我见过在日志猫的消息,我有abaout该消息的疑惑:

I'm trying to do a ListView that it can refresh when i call the function actualizarDisplay(). I've seen in the log cat a message, and i have doubts abaout that message:

10-06 12:24:02.524: I/dalvikvm(6911): Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
10-06 12:24:02.524: W/dalvikvm(6911): VFY: unable to resolve virtual method 561: Landroid/content/res/TypedArray;.getType (I)I
10-06 12:24:02.524: D/dalvikvm(6911): VFY: replacing opcode 0x6e at 0x0002
10-06 12:24:02.688: D/AbsListView(6911): Get MotionRecognitionManager
10-06 12:24:02.712: D/AbsListView(6911): onVisibilityChanged() is called, visibility : 4
10-06 12:24:02.712: D/AbsListView(6911): unregisterIRListener() is called 
10-06 12:24:02.712: D/AbsListView(6911): onVisibilityChanged() is called, visibility : 0
10-06 12:24:03.055: D/AbsListView(6911): unregisterIRListener() is called

我的问题是,当我按下屏幕onClickListener不reviced事件。

my problem is when i push the screen the event onClickListener is not reviced.

这是我的主要活动:

public class Rescate extends ActionBarActivity {

ArrayList<Ficha> listaFichas = new ArrayList<Ficha>();
MyCustomAdapter dataAdapter = null;

Ficha fichaAux = new Ficha();

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

    Bundle b = this.getIntent().getExtras();
    int tipo=b.getInt("lugar");

    switch(tipo) {
        case 1:
            break;

        case 2:
            break;

        case 3:
            break;

        case 4:
            fichaAux.setNumInv("1");
            fichaAux.setIden("cuadro");
            fichaAux.setUbi("sacrsitía");
            fichaAux.setNumHom(2);
            fichaAux.setMat("Plástico");
            fichaAux.setEstado(0);
            fichaAux.setPrioridad(1);
            listaFichas.add(fichaAux);

            fichaAux = new Ficha();
            fichaAux.setNumInv("2");
            fichaAux.setIden("cuadro");
            fichaAux.setUbi("sacrsitía");
            fichaAux.setNumHom(2);
            fichaAux.setMat("Plástico");
            fichaAux.setEstado(0);
            fichaAux.setPrioridad(2);
            listaFichas.add(fichaAux);

            actualizarDisplay();
            break;

         default:
            setContentView(R.layout.activity_rescate);
    }
}

这是我的函数actualizarDisplay它实现了lsiteners:

this is my function actualizarDisplay which implements the lsiteners:

public void actualizarDisplay()
    {       
        dataAdapter = new MyCustomAdapter(this,R.layout.listadofichas, listaFichas);
        ListView listView = (ListView) findViewById(R.id.listaObras);

        listView.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
            {           
                Intent passIntent = new Intent();
                passIntent.setClass(Rescate.this, VistaFicha.class);

                Bundle bundle = new Bundle();
                bundle.putCharSequence("num",listaFichas.get(arg2).getNumInv() );
                bundle.putCharSequence("ubicacion",listaFichas.get(arg2).getUbi() );

                passIntent.putExtras(bundle);
                startActivity(passIntent);
            }
        });

        listView.setOnItemLongClickListener(new OnItemLongClickListener() 
        {
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3)
            {
                final String[] opciones = new String[] { "Si", "No"};
                final AlertDialog.Builder dialogo = new AlertDialog.Builder(Rescate.this);
                dialogo.setCancelable(true);
                dialogo.setTitle("¿Desea establecer que la obra ha sido rescatada?");
                dialogo.setItems(opciones, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {

                        if (item == 0)
                        {
                            listaFichas.get(arg2).setEstado(1);  
                            actualizarDisplay();
                        }
                        else
                        {
                            listaFichas.get(arg2).setEstado(0);
                            actualizarDisplay();
                        }
                    }
                    });

                dialogo.setCancelable(false);
                dialogo.create();
                dialogo.show(); 


                return false;

            }
        });

        listView.setAdapter(dataAdapter);
    }

这是我的函数来处理ListView的:

and this are my functions to handle the ListView:

public class FichaAdapter extends BaseAdapter 
    {
        private ArrayList<Ficha> fichas;

        public FichaAdapter(ArrayList<Ficha> fichas) 
        {
            this.fichas = fichas;

            //Cada vez que cambiamos los elementos debemos noficarlo
            notifyDataSetChanged();
        }

        public int getCount() 
        {
            return fichas.size();
        }


        public Object getItem(int position) 
        {
            return fichas.get(position);
        }

        public long getItemId(int position) 
        {
            return 0;
        }

        public View getView(int position, View convertView, ViewGroup parent) 
        {
            FichaView view;
            if (convertView == null) //NO existe, creamos uno
                view = new FichaView(parent.getContext());
            else                    //Existe, reutilizamos
                view = (FichaView) convertView;

            view.setFicha(fichas.get(position));

            return view;
        }
    }

private class MyCustomAdapter extends ArrayAdapter<Ficha> 
    {

        private ArrayList<Ficha> fichaList;

        public MyCustomAdapter(Context context, int textViewResourceId,ArrayList<Ficha> fichaList) 
        {
            super(context, textViewResourceId,fichaList);
            this.fichaList = new ArrayList<Ficha>();
            this.fichaList.addAll(fichaList);
        }


        private class ViewHolder 
        {
           TextView num,iden,ubi,hombres,material;
           ImageView foto;   
           RelativeLayout fondo;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            ViewHolder holder = null;

            if (convertView == null) 
            {
               LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               convertView = vi.inflate(R.layout.listadofichas, null);

              holder = new ViewHolder();
               holder.num = (TextView) convertView.findViewById(R.id.numInvResCon);
               holder.iden = (TextView) convertView.findViewById(R.id.idenRescCont);
               holder.ubi = (TextView) convertView.findViewById(R.id.ubiResCon);
               holder.hombres = (TextView) convertView.findViewById(R.id.numHomResCon);
               holder.material = (TextView) convertView.findViewById(R.id.matRescCon);
               holder.foto = (ImageView) convertView.findViewById(R.id.imaResc);      
               holder.fondo = (RelativeLayout) convertView.findViewById(R.id.fondoRes);
               convertView.setTag(holder);
           }
           else 
           {
               holder = (ViewHolder) convertView.getTag();
           }

           Ficha ficha = fichaList.get(position);
           holder.num.setText(ficha.getNumInv());
           holder.iden.setText(ficha.getIden());
           holder.ubi.setText(ficha.getUbi());
           holder.hombres.setText(String.valueOf(ficha.getNumHom()));
           holder.material.setText(ficha.getMat());            

           if(ficha.getPrioridad()==1)
           {
               holder.num.setTextColor(Color.RED);
               holder.iden.setTextColor(Color.RED);
               holder.ubi.setTextColor(Color.RED);
               holder.hombres.setTextColor(Color.RED);
               holder.material.setTextColor(Color.RED);
           }

           if(ficha.getPrioridad()==2)
           {
               holder.num.setTextColor(Color.parseColor("#FF8000"));
               holder.iden.setTextColor(Color.parseColor("#FF8000"));
               holder.ubi.setTextColor(Color.parseColor("#FF8000"));
               holder.hombres.setTextColor(Color.parseColor("#FF8000"));
               holder.material.setTextColor(Color.parseColor("#FF8000"));
           }

           if(ficha.getPrioridad()==3)
           {
               holder.num.setTextColor(Color.GREEN);
               holder.iden.setTextColor(Color.GREEN);
               holder.ubi.setTextColor(Color.GREEN);
               holder.hombres.setTextColor(Color.GREEN);
               holder.material.setTextColor(Color.GREEN);
           }

           if(ficha.getEstado()== 1)
           {
               holder.fondo.setBackgroundColor(Color.GREEN);
               holder.num.setTextColor(Color.WHITE);
               holder.iden.setTextColor(Color.WHITE);
               holder.ubi.setTextColor(Color.WHITE);
               holder.hombres.setTextColor(Color.WHITE);
               holder.material.setTextColor(Color.WHITE);
           }


           return convertView;

        }    
    }

我觉得prgoblem是当日志猫说的知名度:0
我在这行的警告:

I think the prgoblem is when the log cat says visibility: 0 I have a warning in this line:

convertView = vi.inflate(R.layout.listadofichas, null);

我认为这个问题是在这里。

i think that the problem is here.

我写的布局:

listadofichas.xml

listadofichas.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/fondoRes"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF"
        android:contentDescription="@string/par" >

        <ImageView
            android:id="@+id/imaResc"
            android:layout_width="160dp"
            android:layout_height="160dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginBottom="40dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="1dp"
            android:contentDescription="@string/vacia"
            android:src="@drawable/ic_launcher" />

        <TextView
            android:id="@+id/numInv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/imaResc"
            android:layout_marginLeft="100dp"
            android:layout_toRightOf="@+id/imaResc"
            android:text="@string/numInvResc"
            android:textColor="#000000"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/idenResc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/numInv"
            android:layout_below="@+id/numInv"
            android:layout_marginTop="12dp"
            android:text="@string/idenResc"
            android:textColor="#000000"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/ubiResc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/idenResc"
            android:layout_below="@+id/idenResc"
            android:layout_marginTop="12dp"
            android:text="@string/ubiResc"
            android:textColor="#000000"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/numHomResc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/ubiResc"
            android:layout_below="@+id/ubiResc"
            android:layout_marginTop="12dp"
            android:text="@string/numHomResc"
            android:textColor="#000000"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/matResc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/numHomResc"
            android:layout_below="@+id/numHomResc"
            android:layout_marginTop="12dp"
            android:text="@string/matResc"
            android:textColor="#000000"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/numInvResCon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/idenResc"
            android:layout_marginLeft="84dp"
            android:layout_toRightOf="@+id/numInv"
            android:text="@string/vacia"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/idenRescCont"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/idenResc"
            android:layout_alignLeft="@+id/numInvResCon"
            android:text="@string/vacia"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/ubiResCon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/numHomResc"
            android:layout_alignLeft="@+id/idenRescCont"
            android:text="@string/vacia"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/numHomResCon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/matResc"
            android:layout_alignLeft="@+id/ubiResCon"
            android:text="@string/vacia"
            android:textSize="@dimen/letrasPequenasAumen" />

        <TextView
            android:id="@+id/matRescCon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/matResc"
            android:layout_alignBottom="@+id/matResc"
            android:layout_alignLeft="@+id/numHomResCon"
            android:text="@string/vacia"
            android:textSize="@dimen/letrasPequenasAumen" />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/imaResc"
            android:layout_marginLeft="23dp"
            android:layout_marginStart="23dp"
            android:layout_toEndOf="@+id/imaResc"
            android:layout_toRightOf="@+id/imaResc"
            android:contentDescription="@string/guia"
            android:src="@drawable/barralat" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/matResc"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="16dp"
            android:src="@drawable/barrahor" />

        <Spinner
            android:id="@+id/spinner2"
            style="@style/mySpinnerItemStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/spinner1"
            android:layout_below="@+id/spinner1"
            android:layout_marginTop="13dp"
            android:entries="@array/equipos" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/numInvResCon"
            android:layout_alignBottom="@+id/numInvResCon"
            android:layout_marginLeft="203dp"
            android:layout_toRightOf="@+id/numInvResCon"
            android:text="@string/equiposAsig"
            android:textColor="#000000"
            android:textSize="@dimen/letrasPequenasAumen" />

        <Spinner
            android:id="@+id/spinner1"
            style="@style/mySpinnerItemStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="13dp"
            android:layout_marginLeft="13dp"
            android:entries="@array/equipos" />

    </RelativeLayout>

and the layout of the activity

<LinearLayout 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="app.gepv.Rescate" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF" >

        <ListView
        android:id="@+id/listaObras"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="60dp"
        android:layout_marginTop="1dp"
        android:layout_marginBottom="20dp"
        tools:listitem="@layout/listadofichas" >
    </ListView>

    </RelativeLayout>

</LinearLayout>

该adpater效果很好,因为我可以改变颜色,..但听者不工作
谁能帮我?

The adpater works well because i can change the color,.. but the listener doesn't work Can anyone help me?

推荐答案

因此​​,这里是我的code。与字符串列表中的项目,而不是那些。数据表。我做了'Rescate.java第一延长 AppCompatActivity 然后 ActionBarActivity ,和它的工作了两个版本:

So here's my code with String list items instead of Ficha ones. I made 'Rescate.java' first extend AppCompatActivity and then ActionBarActivity, and it worked for both versions:

public class Rescate extends ActionBarActivity
{
ArrayList<String> listaFichas = new ArrayList<>();
MyCustomAdapter dataAdapter = null;

String fichaAux = "Hello";

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

    // setting this up with Strings to keep things simple
    listaFichas.add("Hello");
    listaFichas.add("Hi there");
    actualizarDisplay();
}

public void actualizarDisplay()
{
    dataAdapter = new MyCustomAdapter(this,R.layout.listadofichas, listaFichas);
    ListView listView = (ListView) findViewById(R.id.listaObras);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
        {
            Intent passIntent = new Intent();
            passIntent.setClass(Rescate.this, VistaFicha.class);

            startActivity(passIntent);
        }
    });

    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
    {
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3)
        {
            final String[] opciones = new String[]{"Si", "No"};
            final AlertDialog.Builder dialogo = new AlertDialog.Builder(Rescate.this);
            dialogo.setCancelable(true);
            dialogo.setTitle("¿Desea establecer que la obra ha sido rescatada?");
            dialogo.setItems(opciones, new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog, int item)
                {

                    if (item == 0)
                    {
                        actualizarDisplay();
                        Toast.makeText(Rescate.this, "item = 0", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        Toast.makeText(Rescate.this, "item != 0", Toast.LENGTH_SHORT).show();
                    }
                }
            });

            dialogo.setCancelable(false);
            dialogo.create();
            dialogo.show();

            return false;

        }
    });

    listView.setAdapter(dataAdapter);
}

}

VistaFicha.java'只是显示Hello World的一个空白的活动。

'VistaFicha.java' is just a blank activity showing "Hello World".

我把adpater在一个单独的文件'MyCustomAdapter.java

I put the adpater in a separate file 'MyCustomAdapter.java'

public class MyCustomAdapter extends ArrayAdapter
{

    private ArrayList<String> fichaList;
    private LayoutInflater vi;

    public MyCustomAdapter(Context context, int textViewResourceId,ArrayList<String> fichaList)
    {
        super(context, textViewResourceId,fichaList);
        this.fichaList = new ArrayList<String>();
        this.fichaList.addAll(fichaList);
        // I had to change the original code because my adapter is not an inner class:
        vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    private class ViewHolder
    {
        TextView num;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder holder = null;

        if (convertView == null)
        {
            convertView = vi.inflate(R.layout.listadofichas, null);

            holder = new ViewHolder();
            holder.num = (TextView) convertView.findViewById(R.id.tvHallo);

            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        String ficha = fichaList.get(position);
        holder.num.setText(ficha);

        return convertView;
    }
}

有关列表的行XML是一个简单的的TextView (R.id.tvHallo)内的的LinearLayout 和我收复活动包含只有平时的Hello World和的ListView (R.id.listaObras)

The xml for the list rows is simply a TextView (R.id.tvHallo) inside a LinearLayout and my Rescate activity contains only the usual "Hello World" and the ListView (R.id.listaObras)

希望这会有所帮助,让我知道,如果有任何问题:)

Hope this helps, and let me know if there are any questions :)

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

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