【问题标题】:Disable button in a Listview's row while getting response of a save?在获取保存响应时禁用 Listview 行中的按钮?
【发布时间】:2020-08-31 08:44:07
【问题描述】:

问题: 我在 Mainactivity 中有一个 Listview。 listview 的每一行都有两个按钮,分别是 SET 和 RUN。 按 SET 将带您进入 SET 活动,如果用户单击 SET Activity 中的保存按钮,我需要禁用 mainactivity 中列表视图相应行位置的 SET 按钮。

到目前为止完成: 为此,我在 onclicklistener 上有一个刷新功能,可以用更新的值重新查询列表。在 Mainactivity 中如何在没有按键的情况下调用该刷新功能,还是有其他方法?

活动主要:

 viewHolder.ButtonSET.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    String title = v.getTag().toString();

                    if (title.equals("SET")) {

                        if (Integer.parseInt((String) viewHolder.TDNQTY.getText()) > 0) {

                            if(scanoverornot(pos)<=0) {

                                Intent s = new Intent(DN.this, SETActivity.class);
                                s.putExtra("position", pos);
                                s.putExtra("mode", "SET");

                                try{

                                    startActivityForResult(s, saverequestcode);
                                    // getContext().startActivity(s);

                                 }
                                catch(Exception e){
                                    Toast.makeText(getContext(),""+e,Toast.LENGTH_LONG).show();
                                }
                           }

                        }
                    }
                }

            });
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (data == null)
            return;

        switch (requestCode) {

            case saverequestcode:

                if (resultCode == RESULT_OK) {

                    String SItem= data.getStringExtra("SItem");
                    int SPos= data.getIntExtra("SPos", 0);
                    saved = 700;
                    Toast.makeText(getApplicationContext(), ""+ SItem+ SPos, Toast.LENGTH_LONG).show();
                    //btnvalidate.performClick();
                }
       }
                   
}

活动集:

  Intent sav = new Intent();
  sav.putExtra("SItem", String.valueOf(itemno));
  sav.putExtra("SPos", String.valueOf(pos));
  setResult(RESULT_OK, sav);
  finish();

【问题讨论】:

  • 使用 startActivityFor 结果开始您的 SET 活动。 PutExtra 项目位置。当 SET 活动完成时,意图中的位置。在 onActivityResult 中,您从数据意图获取位置参数并在适配器中调整参数。然后调用 notifyDataSetChanged。
  • 你能用代码解释一下吗?然后调用 notifyDataSetChanged.] ?
  • 你能用上面编辑的代码指导我吗?
  • 是的。 s.putExtra("position", pos); 你在哪里确定 pos ?您应该在 onClick() 中执行此操作。通常人们会使用标签作为位置,但您将按钮的文本放入其中。将位置放入其中,您不必检查它是否是 SET 按钮,因为它只能是那个按钮。请调整您的代码。
  • 如果您需要知道按钮的文本,请使用(Button) v). getText();

标签: android sqlite button notifydatasetchanged


【解决方案1】:

您可以使用startActivityForResult 来实现此目的:

startActivityForResult(new Intent(this, DestinationActivity.class), MY_RESULT);

然后在你的MainActivity:

public int MY_RESULT = 10;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == MY_RESULT) {
        if (resultCode == Activity.RESULT_OK) {
            //refresh the list according to your logic
        } 
    }
}

当用户点击保存按钮时不要忘记调用setResult(Activity.RESULT_OK);

saveButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setResult(Activity.RESULT_OK);
        }
    });

【讨论】:

    【解决方案2】:

    问题行:

    1. 必须加super.onActivityResult(requestCode, resultCode, data);

    2. 删除了switch 的情况并使用if 条件检查requestCode

    解决方案:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
         
            if (data == null)
                return;
    
            if (requestCode == saverequestcode) {
    
                if (resultCode == Activity.RESULT_OK) {
    
                    String SItem = data.getStringExtra("SItem");
                    String SPos = data.getStringExtra("SPos");
                    
                    Toast.makeText(getApplicationContext(), "Item :" + SItem + "Position :" + SPos, Toast.LENGTH_LONG).show();
                             
                }
                if (resultCode == Activity.RESULT_CANCELED) {
                    //Any methods
                }
            }
            else if (requestCode == importrequestcode){
    
    
            }
    }
    
    

    活动集:

      Intent sav = new Intent();
      sav.putExtra("SItem", String.valueOf(itemno));
      sav.putExtra("SPos", String.valueOf(pos));
      setResult(Activity.RESULT_OK,sav);
      finish();
    

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 2020-01-15
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 2022-07-20
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多