Manipulating buttons on items in a list

3

Personal I have a problem on my list.

In my list it is the same as the image below:

ThearrowsshouldincreasethenumberofgoalsofthecorrespondingtextView,butthisisnotthecase.RegardlessoftheitemIclickedonthearrowstheincreasedvalueisalwaysthatofthelastitem.ForexampleifIclickonthearrowtoincreasethenumberofPalmeirasgoals,IendupincreasingthatofParaná.

IthinktheproblemisthatIamnotabletoresumetheitemfromthelistwherethebuttonwasclickedandsotheproblemcanonlybeonmyadapter.

Follows:

publicclassAdaptadorListaextendsBaseAdapter{privateLayoutInflatermInflater;privateList<Jogo>itens;privateViewviewSelecionada;privateintgolsMandante=0;privateintgolsVisitante=0;privateintgols=0;privatebooleanbtMaisPressionado=false;privatebooleanbtMenosPressionado=false;privateItemSuporteitemSuporte;privateintposicaoNaLista;publicAdaptadorLista(Contextcontext,List<Jogo>itens){this.mInflater=LayoutInflater.from(context);this.itens=itens;}@OverridepublicintgetCount(){//TODOAuto-generatedmethodstubreturnitens.size();}@OverridepublicObjectgetItem(intposition){//TODOAuto-generatedmethodstubreturnitens.get(position);}@OverridepubliclonggetItemId(intposition){//TODOAuto-generatedmethodstubreturnposition;}@OverridepublicViewgetView(intposition,Viewview,ViewGroupparent){//TODOAuto-generatedmethodstubif(view==null){itemSuporte=newItemSuporte();view=mInflater.inflate(R.layout.item_lista,null);itemSuporte.btMaisGolsMandante=((ImageButton)view.findViewById(R.id.btMaisGolsMandante));itemSuporte.btMaisGolsVisitante=((ImageButton)view.findViewById(R.id.btMaisGolsVisitante));itemSuporte.btMenosGolsMandante=((ImageButton)view.findViewById(R.id.btMenosGolsMandante));itemSuporte.btMenosGolsVisitante=((ImageButton)view.findViewById(R.id.btMenosGolsVisitante));itemSuporte.txtPlacarMandante=((TextView)view.findViewById(R.id.txtPlacarMandante));itemSuporte.txtPlacarVisitante=((TextView)view.findViewById(R.id.txtPlacarVistante));itemSuporte.txtNomeMandante=((TextView)view.findViewById(R.id.txtSimboloMandante));itemSuporte.txtNomeVisitante=((TextView)view.findViewById(R.id.txtSimboloVisitante));itemSuporte.txtDataJogo=((TextView)view.findViewById(R.id.txtDataJogo));itemSuporte.txtLocalJogo=((TextView)view.findViewById(R.id.txtLocalJogo));itemSuporte.simboloMandante=((ImageView)view.findViewById(R.id.imgMandante));itemSuporte.simboloVisitante=((ImageView)view.findViewById(R.id.imgVisitante));view.setTag(itemSuporte);}else{itemSuporte=(ItemSuporte)view.getTag();}Jogojogo=itens.get(position);itemSuporte.simboloMandante.setImageResource(jogo.getTimeMandante().getCodigoImagemSimbolo());itemSuporte.simboloVisitante.setImageResource(jogo.getTimeVisitante().getCodigoImagemSimbolo());itemSuporte.txtNomeMandante.setText(jogo.getTimeMandante().getSigla());itemSuporte.txtNomeVisitante.setText(jogo.getTimeVisitante().getSigla());itemSuporte.txtPlacarMandante.setText(Integer.toString(jogo.getGolsMandante()));itemSuporte.txtPlacarVisitante.setText(Integer.toString(jogo.getGolsVisitante()));itemSuporte.txtDataJogo.setText(jogo.getData());itemSuporte.txtLocalJogo.setText(jogo.getLocal());itemSuporte.btMaisGolsMandante.setOnTouchListener(newOnTouchListener(){@OverridepublicbooleanonTouch(Viewv,MotionEventevent){viewSelecionada=v;if(event.getAction()==MotionEvent.ACTION_DOWN){btMaisPressionado=true;newAumentaGols().execute();}elseif(event.getAction()==MotionEvent.ACTION_UP){btMaisPressionado=false;}returntrue;}});itemSuporte.btMenosGolsMandante.setOnTouchListener(newOnTouchListener(){@OverridepublicbooleanonTouch(Viewv,MotionEventevent){viewSelecionada=v;if(event.getAction()==MotionEvent.ACTION_DOWN){btMenosPressionado=true;newDiminuiGols().execute();}elseif(event.getAction()==MotionEvent.ACTION_UP){btMenosPressionado=false;}returntrue;}});itemSuporte.btMaisGolsVisitante.setOnTouchListener(newOnTouchListener(){@OverridepublicbooleanonTouch(Viewv,MotionEventevent){viewSelecionada=v;if(event.getAction()==MotionEvent.ACTION_DOWN){btMaisPressionado=true;newAumentaGols().execute();}elseif(event.getAction()==MotionEvent.ACTION_UP){btMaisPressionado=false;}returntrue;}});itemSuporte.btMenosGolsVisitante.setOnTouchListener(newOnTouchListener(){@OverridepublicbooleanonTouch(Viewv,MotionEventevent){viewSelecionada=v;if(event.getAction()==MotionEvent.ACTION_DOWN){btMenosPressionado=true;newDiminuiGols().execute();}elseif(event.getAction()==MotionEvent.ACTION_UP){btMenosPressionado=false;}returntrue;}});returnview;}publicvoidsetGols(){switch(viewSelecionada.getId()){caseR.id.btMaisGolsMandante:gols=golsMandante;break;caseR.id.btMenosGolsMandante:gols=golsMandante;break;default:gols=golsVisitante;break;}}privateclassItemSuporte{ImageViewsimboloMandante;ImageViewsimboloVisitante;TextViewtxtPlacarMandante;TextViewtxtPlacarVisitante;TextViewtxtNomeMandante;TextViewtxtNomeVisitante;TextViewtxtDataJogo;TextViewtxtLocalJogo;ImageButtonbtMaisGolsMandante;ImageButtonbtMaisGolsVisitante;ImageButtonbtMenosGolsMandante;ImageButtonbtMenosGolsVisitante;}classAumentaGolsextendsAsyncTask<Void,Integer,Void>{@OverrideprotectedVoiddoInBackground(Void...params){//TODOAuto-generatedmethodstubwhile(btMaisPressionado){setGols();if(gols<9){gols++;publishProgress(gols);try{Thread.sleep(200);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}returnnull;}@OverrideprotectedvoidonProgressUpdate(Integer...values){//TODOAuto-generatedmethodstubsuper.onProgressUpdate(values);if(viewSelecionada.getId()==R.id.btMaisGolsMandante){itemSuporte.txtPlacarMandante.setText(String.valueOf(gols));golsMandante=gols;}if(viewSelecionada.getId()==R.id.btMaisGolsVisitante){itemSuporte.txtPlacarVisitante.setText(String.valueOf(gols));golsVisitante=gols;}}@OverrideprotectedvoidonPostExecute(Voidresult){//TODOAuto-generatedmethodstubsuper.onPostExecute(result);if(viewSelecionada.getId()==R.id.btMaisGolsMandante){itemSuporte.txtPlacarMandante.setText(String.valueOf(gols));golsMandante=gols;}if(viewSelecionada.getId()==R.id.btMaisGolsVisitante){itemSuporte.txtPlacarVisitante.setText(String.valueOf(gols));golsVisitante=gols;}}}classDiminuiGolsextendsAsyncTask<Void,Integer,Void>{@OverrideprotectedVoiddoInBackground(Void...params){//TODOAuto-generatedmethodstubwhile(btMenosPressionado){if(gols>0){gols--;publishProgress(gols);try{Thread.sleep(200);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}returnnull;}@OverrideprotectedvoidonProgressUpdate(Integer...values){//TODOAuto-generatedmethodstubsuper.onProgressUpdate(values);if(viewSelecionada.getId()==R.id.btMenosGolsMandante){itemSuporte.txtPlacarMandante.setText(String.valueOf(gols));golsMandante=gols;}if(viewSelecionada.getId()==R.id.btMenosGolsVisitante){itemSuporte.txtPlacarVisitante.setText(String.valueOf(gols));}}@OverrideprotectedvoidonPostExecute(Voidresult){//TODOAuto-generatedmethodstubsuper.onPostExecute(result);if(viewSelecionada.getId()==R.id.btMenosGolsMandante){itemSuporte.txtPlacarMandante.setText(String.valueOf(gols));golsMandante=gols;}if(viewSelecionada.getId()==R.id.btMenosGolsVisitante){itemSuporte.txtPlacarVisitante.setText(String.valueOf(gols));golsVisitante=gols;}}}}

Layoutofeachitemitem_list.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/txtDataJogo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="10/11 - 21:00" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/imgMandante"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"
            android:layout_weight="7"
            android:src="@drawable/parana2" />

        <TextView
            android:id="@+id/txtSimboloMandante"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|center_horizontal"
            android:layout_weight="1"
            android:text="PAR"
            android:textSize="20sp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:orientation="vertical" >

            <ImageButton
                android:id="@+id/btMaisGolsMandante"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|center_horizontal"
                android:layout_weight="4"
                android:background="@drawable/setaparacima" />

            <TextView
                android:id="@+id/txtPlacarMandante"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|center_horizontal"
                android:layout_weight="1"
                android:gravity="center_vertical|center_horizontal"
                android:text="2"
                android:textSize="50sp" />

            <ImageButton
                android:id="@+id/btMenosGolsMandante"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|center_horizontal"
                android:layout_weight="4"
                android:background="@drawable/setaparabaixo" />

        </LinearLayout>

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:gravity="center_vertical|center_horizontal"
            android:text="x"
            android:textSize="40sp" />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="3"
    android:orientation="vertical" >

            <ImageButton
                android:id="@+id/btMaisGolsVisitante"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|center_horizontal"
                android:layout_weight="4"
                android:background="@drawable/setaparacima" />

            <TextView
                android:id="@+id/txtPlacarVistante"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|center_horizontal"
                android:layout_weight="1"
                android:gravity="center_vertical|center_horizontal"
                android:text="1"
                android:textSize="50sp" />

            <ImageButton
                android:id="@+id/btMenosGolsVisitante"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|center_horizontal"
                android:layout_weight="4"
                android:background="@drawable/setaparabaixo" />

        </LinearLayout>

        	<TextView
        	    android:id="@+id/txtSimboloVisitante"
        	    android:layout_width="wrap_content"
        	    android:layout_height="wrap_content"
        	    android:layout_gravity="center_vertical|center_horizontal"
        	    android:layout_weight="1"
        	    android:text="AVA"
        	    android:textSize="20sp" />

        <ImageView
            android:id="@+id/imgVisitante"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"
            android:layout_weight="7"
            android:src="@drawable/avai2" />

    </LinearLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/txtLocalJogo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Allianz Parque" />

    </LinearLayout>



</LinearLayout>
    
asked by anonymous 11.11.2014 / 20:38

1 answer

4

Your adapter looks good to me. The problem is with itemSuporte usage. Note that itemSuporte is used whenever a line of listView needs to be drawn. At the end of the entire list being displayed it will point to the layout / view of the last line.

You must use another variable to save the layout / view to which the pressed button belongs. It must be initialized in each of the onTouch methods.

I do not know what the layout of the listView line is. Assuming all elements are included in the same layout, this layout / view can be obtained in onTouch by using the getParent() method of view passed.
Then just use findViewById to get the other views of the line.

EDIT (After viewing xml)

It seems like the button and the text you want to change are in the same LinearLayout . So do the following:

private LinearLayout linhaLista;  

In each onTouch :

@Override
public boolean onTouch(View v, MotionEvent event) {
    viewSelecionada = v;
    linhaLista = (LinearLayout)v.getParent();
    ...
    ...
}  

In methods onProgressUpdate() and onPostExecute() use linhaLista to get textView :

TextView txtPlacarMandante = (TextView)linhaLista.findViewById(R.id.txtPlacarMandante)
TextView txtPlacarVistante = (TextView)linhaLista.findViewById(R.id.txtPlacarVistante)
    
11.11.2014 / 22:29