2017-12-18 10 views
0

내 클래스 ProductAdapter 내가 2 개의 각 행의 버튼 (+)와 함께 팽창 행을 해요의 getView에 ArrayAdapter와 를 확장 (-) 와 같이 각 버튼에 대한 anonim OnClickListener를 설정 :ArrayAdapter에 연결된 ListView 행에서 Button을 비활성화하는 방법은 무엇입니까?

viewHolder.removeButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      BigDecimal count = product.getCount().subtract(BigDecimal.ONE); 
      if (count.signum() < 0) count = BigDecimal.ZERO; 
      product.setCount(count); 
      viewHolder.countView.setText(formatValue(count, product.getUnit())); 
      mListener.onCardClick(v); 
     } 
    }); 

에 액티비티 내가 각 행에서 정수 값을 사용할 때 일부 AsyncTask 할 필요가. 문제는 AsyncTask를 실행하는 사용자가 여전히 제품 어댑터를 변경할 수 있다는 것입니다 (단추가 작동 함). AsyncTask가 작동하고 완료 한 후에 다시 활성화하는 동안 비활성화해야합니다. 행운을 비으며 ListView를 비활성화하려고했습니다. 또한 ArrayAdapter 메서드를 isAllEnadled 및 isEnabled를 재정의하려고했는데 행운이 없습니다.

+0

를 호출 할 수

mListener.onCardClick(View v, ButtonsHandler buttonsHandler); 

때문에 통화가 될 것인가? 어떤 종류의 진도 대화 상자를 보여주지 않습니까? – KBJ

+0

아니요 나는 프로세스 동안 사용자에게 어떤 종류의 대화 상자도 사용하지 않습니다. – Andrew

답변

1

재미있는 문제, 당신은 이를 저장하는 장소가 필요,이 은 클릭 동작을 제어 할 수 있습니다. 당신은 제품 자체는 같은 확인하고이

처럼 돌아갈 수 onClick()

뭔가

protected void onPreExecute(Void result) { 
product.setFetching(true) 
} 


protected void onPostExecute(Void result) { 
product.setFetching(false) 
} 

처럼 해당 인덱스에 해당하는 목록과 같은 또는 다른 장소이 중 을 절약 할 수 있습니다
if (product.isFetching()) 
return; 
+0

이것은 "잠금"과 같은 각 행에 여분의 부울 값을 저장해야한다는 것을 의미합니다. 그리고 프로세스 전에 aech 행에서 true로 설정하고 false로 설정합니까? 다른 방법이라도? 좋지 않게 보입니다. – Andrew

+0

상태를 저장할 장소가 필요하며이 상태는 클릭 동작을 제어하는 ​​데 사용할 수 있습니다. 제품 자체 또는 해당 색인에 해당하는 목록과 같은 다른 위치에 저장할 수 있습니다. – Akhil

1

활성화/비활성화 버튼에 대한 콜백 메서드를 설정해야합니다. 인터페이스를 사용할 수 있습니다.

의사 :

public interface ButtonsHandler { 

    void enableButtons(); 
    void disableButtons(); 

} 

그런 다음 당신은 당신이 작업을 시작 홀더에서 리스너를 호출 할 때,

public class CustomViewHolder extends RecyclerView.ViewHolder implements ButtonsHandler { 
... 
    void enableButtons() { 
     yourButton1.setEnable(true); 
     yourButton2.setEnable(true); 
    } 

    void disableButtons()() { 
     yourButton1.setEnable(false); 
     yourButton2.setEnable(false); 
    } 
... 

} 

셋째 당신의 viewHolder에 해당 인터페이스를 구현해야, 개체 자체에 전달 버튼 처리를 관리합니다.

mListener.onCardClick(v,viewHolder);  

그리고 당신의 asynktask가 작동하는 동안 마지막으로, 당신은 어떻게 버튼을 AsyncTask를 작업 중에 작업

buttonsHandler.disableButtons(); 

... 

buttonsHandler.enableButtons();