Android의 동적 목록에서 동적으로 이미지 변경

m33ts4k0z

사용자가 동적으로 채울 수있는 arrayadapter가있는 목록보기가있는 앱을 만들었습니다. 기본 설정에 json 문자열로 입력 한 정보를 저장하고 앱을 새로 고치면 항목 목록이 표시됩니다. 문제는 네트워크 작업 후 각 항목 옆의 이미지가 변경되기를 원한다는 것입니다. 내가 직면 한 문제는 목록의 요소가 동적으로 추가되기 때문에 onPostExecute () 메서드에서 imageview를 업데이트하지 않고 각 항목을 구체적으로 대상으로 지정할 수있는 좋은 방법을 찾지 못하는 것 같습니다. 동일한 레이아웃 ID를 공유합니다.

내 어댑터 내부의 getView () 메서드는 다음과 같습니다.

   @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.product_list_item, null);
            holder = new ViewHolder();
            holder.deviceName = (TextView) convertView
                    .findViewById(R.id.txt_pc_name);
            holder.deviceIp = (TextView) convertView
                    .findViewById(R.id.txt_pdt_desc);
            holder.devicePort = (TextView) convertView
                    .findViewById(R.id.txt_pdt_price);
            holder.favoriteImg = (ImageView) convertView
                    .findViewById(R.id.imgbtn_favorite);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        Devices device = (Devices) getItem(position);
        holder.deviceName.setText(device.getName());
        holder.deviceIp.setText(device.getIpOnline());
        holder.devicePort.setText(device.getPortOnline() + "");              


        return convertView;
    }

내 AsyncTask는 다음과 같습니다.

public class Connection extends AsyncTask<String, Void, String> {

   private String ipOnline;
   private int portOnline;
   private String ipWol;
   private int portWol;
   private String macAddress;
   private ImageView img;
   private Context context;
    public interface AsyncResponse {
        void processFinish(String output);
    }



     public AsyncResponse delegate = null;

        public Connection(Context mContext, ImageView Img,String IpOnline, int PortOnline, String IpWol, int PortWol, String MacAddress, AsyncResponse delegate) {
            ipOnline = IpOnline;
            portOnline = PortOnline;
            ipWol = IpWol;
            portWol = PortWol;
            macAddress = MacAddress;
            context = mContext;
          //  inflate = Inflate;
            img = Img;
           // spin = spinner;
            this.delegate = delegate;
        }
        public int status;

        @Override
       protected String doInBackground(String... arg0) {PreferenceManager.getDefaultSharedPreferences(lastContext);
            try  {
                Socket echoSocket = new Socket();
                echoSocket.connect(new InetSocketAddress(ipOnline,portOnline),2000);

                if(echoSocket.isConnected())
                    status = 1;
            } catch (Exception e) {
                status = 0;
            }
            if(status == 0)
                return "0";
            else
                return "1";
       }

        @Override
        protected void onProgressUpdate(Void... values) {}

       @Override
       protected void onPostExecute(String result) {           
           super.onPostExecute(result);
ImageView img = (ImageView) activity.findViewById(R.id.imgbtn_favorite);
               if (status == 0)
                   img.setImageResource(android.R.drawable.presence_offline);
               else
                   img.setImageResource(android.R.drawable.presence_online);
    delegate.processFinish(result);  
       }   
    }

그리고 여기에 대한 나의 부름이 있습니다.

new Connection(activity, img, product.getIpOnline(), Integer.parseInt(product.getPortOnline()), product.getIpWol(), Integer.parseInt(product.getPortWol()), product.getMacAddress(), new Connection.AsyncResponse() {
                        @Override
                        public void processFinish(String output) {
                        }
                    }).execute();
m33ts4k0z

해결책을 찾았습니다.

어댑터에 공용 변수를 만들고 모든 이미지를 추가하고 있습니다.

public List<ImageView> allImages = new ArrayList<ImageView>();

public List<ImageView> getAllImages(){
        return this.allImages;
    }

this.allImages.add((ImageView) convertView
                .findViewById(R.id.imgbtn_favorite));

그런 다음 조각난 활동 onCreateView 메서드에서 지연된 실행 파일을 배포했습니다.

(new Handler()).postDelayed(new Runnable() {
                @Override
                public void run() {
                    updateStatus();
                }
            }, 500);

updateStatus () 메서드는 이미지 변수를 초기화하고 사용할 이미지를 결정하기 위해 네트워크 검사를 시작합니다. 그런 다음 그에 따라 적용합니다.

public void updateStatus() {
        List<ImageView> images = deviceListAdapter.getAllImages();
        if(count > 0 && images.size() > 0) {
            for (int i = 0; i < deviceListAdapter.getCount() ; i++) {
                Devices product = (Devices) deviceListAdapter.getItem(i);
                if((TextUtils.isDigitsOnly(product.getPortOnline()) && TextUtils.isDigitsOnly(product.getPortWol())) && (!product.getPortOnline().isEmpty() && !product.getPortWol().isEmpty()))  {
                    new Connection(activity, images.get(i), product.getIpOnline(), Integer.parseInt(product.getPortOnline()), product.getIpWol(), Integer.parseInt(product.getPortWol()), product.getMacAddress(), new Connection.AsyncResponse() {
                        @Override
                        public void processFinish(Boolean output) {
                        }
                    }).execute();
                }
            }
        }
    }

최적이 아닐 수도 있지만 더 나은 솔루션을 자유롭게 추가 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

CoreUI의 CBreadcrumbRouter에서 동적으로 페이지 제목 변경

분류에서Dev

jquery로 동적으로로드 된 이미지의 src 변경

분류에서Dev

if 문에서 이미지를 동적으로 변경

분류에서Dev

Android 알림에서 동적으로 아이콘 변경

분류에서Dev

HTML, JSON의 이미지 소스를 동적으로 변경

분류에서Dev

ReactJS의 경로 이미지에서 동적으로로드 할 위치

분류에서Dev

웹 사이트에서 동적으로 변경되는 이미지의 URL 스크랩

분류에서Dev

GridView에서 행의 이미지 색상 레이아웃을 동적으로 변경

분류에서Dev

Excel의 드롭 다운 목록 결과에서 동적으로 셀 변경

분류에서Dev

자동 레이아웃에서 UIScrollView의 크기를 동적으로 변경

분류에서Dev

Android에서 동적으로 마커 제목 변경

분류에서Dev

iOS Swift : 동적으로 변경된 레이블의 왼쪽에 이미지를 배치하는 방법

분류에서Dev

Android에서 ListView의 목록 항목을 동적으로 변경하는 방법은 무엇입니까?

분류에서Dev

화면 크기에 맞게 이미지 경로를 동적으로 변경

분류에서Dev

Big Cartel의 메타 페이지 제목을 동적으로 변경

분류에서Dev

각도 js의 값에 따라 이미지를 동적으로 변경하는 방법

분류에서Dev

UITableViewAutomaticDimension을 사용하여 이미지의 tableViewCell 높이를 동적으로 변경

분류에서Dev

JavaFX의 목록보기에서 항목의 배경을 동적으로 변경하는 방법

분류에서Dev

JS-내 tinymce에서 이미지를 동적으로 변경하는 방법

분류에서Dev

Android Wear에서 액션 아이콘을 동적으로 변경하는 방법

분류에서Dev

ID가 동적으로 변경되는 이미지 (img)의 '소스'값 찾기

분류에서Dev

Android에서 플래그 변수의 이름을 늘리거나 동적으로 변경할 수 있습니까?

분류에서Dev

Flutter에서 Icon-Widget의 아이콘을 동적으로 변경

분류에서Dev

HTML의 jquery에서 동적으로 레이블 텍스트 변경

분류에서Dev

React JSX 내에서 .map의 입력 이름을 동적으로 변경

분류에서Dev

CSS 배경의 데이터베이스에서 이미지를 동적으로로드

분류에서Dev

동적으로 생성 된 목록에서 클릭시 jQuery Mobile 변경 페이지 (JSON 데이터)

분류에서Dev

Angular2에서 동적으로 페이지 <Head> 변경

분류에서Dev

동적으로 변경되는 문자열의 마지막 항목 추출

Related 관련 기사

  1. 1

    CoreUI의 CBreadcrumbRouter에서 동적으로 페이지 제목 변경

  2. 2

    jquery로 동적으로로드 된 이미지의 src 변경

  3. 3

    if 문에서 이미지를 동적으로 변경

  4. 4

    Android 알림에서 동적으로 아이콘 변경

  5. 5

    HTML, JSON의 이미지 소스를 동적으로 변경

  6. 6

    ReactJS의 경로 이미지에서 동적으로로드 할 위치

  7. 7

    웹 사이트에서 동적으로 변경되는 이미지의 URL 스크랩

  8. 8

    GridView에서 행의 이미지 색상 레이아웃을 동적으로 변경

  9. 9

    Excel의 드롭 다운 목록 결과에서 동적으로 셀 변경

  10. 10

    자동 레이아웃에서 UIScrollView의 크기를 동적으로 변경

  11. 11

    Android에서 동적으로 마커 제목 변경

  12. 12

    iOS Swift : 동적으로 변경된 레이블의 왼쪽에 이미지를 배치하는 방법

  13. 13

    Android에서 ListView의 목록 항목을 동적으로 변경하는 방법은 무엇입니까?

  14. 14

    화면 크기에 맞게 이미지 경로를 동적으로 변경

  15. 15

    Big Cartel의 메타 페이지 제목을 동적으로 변경

  16. 16

    각도 js의 값에 따라 이미지를 동적으로 변경하는 방법

  17. 17

    UITableViewAutomaticDimension을 사용하여 이미지의 tableViewCell 높이를 동적으로 변경

  18. 18

    JavaFX의 목록보기에서 항목의 배경을 동적으로 변경하는 방법

  19. 19

    JS-내 tinymce에서 이미지를 동적으로 변경하는 방법

  20. 20

    Android Wear에서 액션 아이콘을 동적으로 변경하는 방법

  21. 21

    ID가 동적으로 변경되는 이미지 (img)의 '소스'값 찾기

  22. 22

    Android에서 플래그 변수의 이름을 늘리거나 동적으로 변경할 수 있습니까?

  23. 23

    Flutter에서 Icon-Widget의 아이콘을 동적으로 변경

  24. 24

    HTML의 jquery에서 동적으로 레이블 텍스트 변경

  25. 25

    React JSX 내에서 .map의 입력 이름을 동적으로 변경

  26. 26

    CSS 배경의 데이터베이스에서 이미지를 동적으로로드

  27. 27

    동적으로 생성 된 목록에서 클릭시 jQuery Mobile 변경 페이지 (JSON 데이터)

  28. 28

    Angular2에서 동적으로 페이지 <Head> 변경

  29. 29

    동적으로 변경되는 문자열의 마지막 항목 추출

뜨겁다태그

보관