隐藏基于 if 语句动态添加的按钮

Posted

技术标签:

【中文标题】隐藏基于 if 语句动态添加的按钮【英文标题】:Hide dynamically added buttons based on an if statement 【发布时间】:2012-08-15 05:14:42 【问题描述】:

我似乎无法弄清楚如何做到这一点,基本上我有一个列表视图,其中包含一堆按钮,每个按钮都有自己的单独值,这一切都很好,直到我想隐藏某些按钮锅。

这个列表视图有它自己的自定义适配器,代码是:

为空间删除了导入但它们存在。

public class FriendsArrayAdapter extends ArrayAdapter<Friend> 

    public FriendsArrayAdapter
    (Activity context, int resourceId, ArrayList<Friend> friends) 

    super(context, resourceId, friends);
    this.context = context;
    this.friends = friends;
    this.resourceId = resourceId;







@Override
public View getView(int position, View convertView, ViewGroup parent) 

    View rowView = convertView;
    if (rowView == null) 
    
        LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = vi.inflate(resourceId, null);
    



    alert = new AlertDialog.Builder(context);
    alert.setTitle("Hanged! Online Play");
    alert.setMessage("Enter a word for your opponent to guess. Alphabetical characters only and maximum of 25 characters long.");
    final EditText input = new EditText(context);
    alert.setView(input);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() 
    
    public void onClick(DialogInterface dialog, int whichButton) 
    
       wordToGuess = input.getText().toString();
       SubmitWord submitTask = new SubmitWord();
       submitTask.execute(new String[]  "http://www.hanged.comli.com/main.php" );
       Log.i("postData", wordToGuess);
     
    );

   alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
    
      public void onClick(DialogInterface dialog, int whichButton) 
      
          Intent intent = new Intent(context, NetPlay.class);
          intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);       
          context.startActivity(intent);
      
    );

    final Friend f = friends.get(position);
    TextView rowTxt = (TextView) rowView.findViewById(R.id.rowtext_top);
    rowTxt.setText(f.name+"       ");




    Button battleBtn = (Button) rowView.findViewById(R.id.battleBtn);
    battleBtn.setText(f.id+" Accept Challenge");
    battleBtn.setOnClickListener(new OnClickListener() 
    
           @Override
           public void onClick(View v) 
           
               rivalid = f.id;
               AcceptChallenge task2 = new AcceptChallenge();
               task2.execute(new String[]  "http://www.hanged.comli.com/get-currentgame.php" );
           
    );

    Button newgameBtn = (Button) rowView.findViewById(R.id.newgameBtn);
    newgameBtn.setText(f.id+" Start new game.");

    newgameBtn.setOnClickListener(new OnClickListener() 
    
           @Override
           public void onClick(View v) 
           
               rivalid = f.id;
               alert.show();  
              
    );



        for (int i = 0;i<NetPlay.victimArray.length-1;i++)
        
            Log.i("VICTIM ARRAY DATA ", NetPlay.victimArray[i]);

            if (NetPlay.victimArray[i].equals(NetPlay.myId))
            
                ingame = false;
            
            else
            
                ingame = true;
            
        

        for (int i = 0;i<NetPlay.rivalArray.length-1;i++)
        
            Log.i("RIVAL ARRAY DATA ", NetPlay.rivalArray[i]);

            if (NetPlay.rivalArray[i].equals(NetPlay.myId))
            
                battle = true;
            
            else
            
                battle = false;
            

        

        if (battle.equals(false))
        
            battleBtn.setVisibility(View.INVISIBLE);
        
        if (ingame.equals(false))
        
            newgameBtn.setVisibility(View.INVISIBLE);
        


    return rowView;

每当我设法隐藏这些按钮时,它们都会被隐藏,而不仅仅是应该隐藏的按钮,如果这样做有意义的话? 如果该信息有帮助,此视图依赖于来自异步任务的一些数据。

非常感谢您对此的帮助,让我完全不知道该怎么做。

这是在我的主要活动中调用列表视图的地方。

listView = (ListView) findViewById(R.id.friendsview);
friendsArrayAdapter = new FriendsArrayAdapter(this, R.layout.rowlayout, friends);
listView.setAdapter(friendsArrayAdapter);

【问题讨论】:

每个 listView 项目都有“n”个按钮。当您尝试隐藏其中 1 个按钮时,所有“n”按钮都将被隐藏。对??还是所有listView项的所有按钮? 是的,你是对的,但是它们是单独的按钮,因为它们每个都有一个唯一的文本值,所以我认为它们也是唯一的并且不会被大量删除,这些按钮被添加到列表视图中他们被隐藏在同一个班级,所以我无法弄清楚他们的问题是什么 您应该发布您的整个源代码。只有不能正常运行的部分就足够了。 我认为完整的东西会让我更好地了解我正在尝试做的事情,我会删掉一些 【参考方案1】:

问题在于这段代码:

if (battle.equals(false)) 
  battleBtn.setVisibility(View.INVISIBLE);

if (ingame.equals(false)) 
  newgameBtn.setVisibility(View.INVISIBLE);

您知道 ListView 项目被回收(这就是您应该使用ViewHolder 的原因),当条件为真时,您还需要将按钮设置为View.VISIBLE

您的代码应如下所示:

if (battle.equals(false)) 
  battleBtn.setVisibility(View.INVISIBLE);
 else 
  battleBtn.setVisibility(View.VISIBLE);
if (ingame.equals(false)) 
  newgameBtn.setVisibility(View.INVISIBLE);
 else 
  newgameBtn.setVisibility(View.VISIBLE);

【讨论】:

谢谢!这解决了它,总是如此简单以至于被过度思考:)【参考方案2】:

我不知道您的应用程序的逻辑,但我看到错误和两种可能的解决方案。

    1234563所以你应该用false 启动battle 并在它为真时立即中断。

    我认为你应该更改检查:

    NetPlay.victimArray[i].equals(NetPlay.myId)

NetPlay.victimArray[i].equals(friend.id)

对于另一个条件类似。

我还建议您使用HashSet 而不是原始的victimArray。它将使用contains 方法而不是循环为您提供更优化的搜索。

【讨论】:

你说得对,我应该在它再次设置为假之前让它中断,谢谢。 friend.id 和 myID 是不同的东西,不过感谢您的建议,我会研究一下 HashSet。 它并没有解决最初的问题,虽然它解决了错误,但问题仍然存在,所有按钮都被隐藏了,而不是应该隐藏的按钮,就像它们被绑在一起一样

以上是关于隐藏基于 if 语句动态添加的按钮的主要内容,如果未能解决你的问题,请参考以下文章

怎么用JQuery动态添加div 比如 添加 点击一次添加按钮 增加一个div

jquery给表格动态添加删除行后如何获取数据

怎么用JQuery动态添加div 比如 添加 点击一次添加按钮 增加一个div

怎么用JQuery动态添加div 比如 添加 点击一次添加按钮 增加一个div

怎么用JQuery动态添加div 比如 添加 点击一次添加按钮 增加一个div

[RK3568 Android11] 开发之系统动态隐藏导航栏