首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Click Listeners for list,每行有多个按钮

Android Click Listeners for list,每行有多个按钮
EN

Stack Overflow用户
提问于 2013-12-10 23:56:15
回答 1查看 262关注 0票数 0

我正在使用ArrayAdapter在列表中显示我的朋友。然而,每一行都有两个按钮,它们将通过POST请求更新朋友的状态。

我在适配器中定义了两个按钮的单击侦听器,以及处理更新请求的runnable。举个例子:

代码语言:javascript
复制
mToggleAlert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                mToggleAlert = (ToggleButton)finalRowView.findViewById(R.id.toggleAlert);
                mToggleShow = (ToggleButton)finalRowView.findViewById(R.id.toggleShow);
                updateStatus(finalRowView.getId(), mToggleAlert.isChecked(), mToggleShow.isChecked());
            }
        });



    /**
     * Send the updated status to the server
     */
    private void updateStatus(int id, boolean alert, boolean show) {

        final int finalId = id;
        final boolean finalAlert = alert;
        final boolean finalShow = show;

        String.valueOf(mToggleAlert);

        Runnable runnable = new Runnable() {
            public void run() {
                Message msg = handler.obtainMessage();
                Bundle bundle = new Bundle();

                //Post the update to the server
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(Constants.postFriendStatusUrl);

                try {

                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                    nameValuePairs.add(new BasicNameValuePair("user_id",Common.retrieveAppUser(mContext).getId()));
                    nameValuePairs.add(new BasicNameValuePair("friend_id", String.valueOf(finalId)));
                    nameValuePairs.add(new BasicNameValuePair("alert_status", String.valueOf(finalAlert)));
                    nameValuePairs.add(new BasicNameValuePair("show_status", String.valueOf(finalShow)));

                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                    // Execute HTTP Post Request
                    HttpResponse response = httpClient.execute(httppost);

                    HttpEntity httpEntity = response.getEntity();
                    InputStream is = httpEntity.getContent();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(
                            is, "iso-8859-1"), 8);
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }
                    is.close();

                    bundle.putString("result", sb.toString());
                    msg.setData(bundle);

                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                }




                handler.sendMessage(msg);
            }
        };

        Thread mythread = new Thread(runnable);
        mythread.start();


    }

不过,我认为这不是一个很好的方法,所以我把更新服务放到了它自己的AsyncTask中。

我的问题是:我宁愿在实现ArrayAdapter的活动中为两个按钮定义单击侦听器,而不是在适配器本身中。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2013-12-11 00:12:50

代码语言:javascript
复制
    mToggleAlert.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            mToggleAlert = (ToggleButton)finalRowView.findViewById(R.id.toggleAlert);
            mToggleShow = (ToggleButton)finalRowView.findViewById(R.id.toggleShow);
            updateStatus(finalRowView.getId(), mToggleAlert.isChecked(), mToggleShow.isChecked());
        }
    });

只将监听程序设置为mToggleAlert而不是mToggleShow上的监听程序正常吗?

无论如何,您可以将按钮上的getter放在ArrayAdapter中

代码语言:javascript
复制
public ToogleButton getToggleAlert(){
    return mToggleAlert;
}

然后,您将能够从主活动中设置侦听器

您可能只需要将"updateStatus“设置为公共的,以便从您的活动中调用它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20499084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档