【问题标题】:Android How to change data of Textview by clicking on buttonAndroid 如何通过单击按钮更改 Textview 的数据
【发布时间】:2014-01-17 17:57:06
【问题描述】:

首先,应用看起来是这样的。

如何制作 - 如果我点击添加,在其列上的 textview 会更新为 value + 1?

我正在循环中创建 TextView 和 Button;

for(int i = 0;i < playercountint; i++)
{
LinearLayout layout = new LinearLayout(this);
            layout.setOrientation(LinearLayout.VERTICAL);
            layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,(100/playercountint)));
            layout.setGravity(Gravity.CENTER_HORIZONTAL);
TextView tt = new TextView(this);
            tt.setText("0");
            tt.setTextSize(14);
            tt.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            tt.setGravity(Gravity.CENTER_HORIZONTAL);


            Button btadd = new Button(this);
            btadd.setText("Add");
            btadd.setId(2);


            btadd.setOnClickListener(new View.OnClickListener() {
                 public void onClick(View v) {
                     ????? what here?
                 }
             });
}

onClick函数中应该写什么,所以只改变了按钮列中的TextView值。

有一个水平方向的外部LinearLayout,在循环中创建的是垂直LinearLayouts。

也许我应该为 1 次循环迭代创建一个模板?

【问题讨论】:

    标签: java android android-layout sdk


    【解决方案1】:

    首先让你的 textview final 然后他们在 onClick 中设置它的值

    for(int i = 0;i < playercountint; i++)
    {
    LinearLayout layout = new LinearLayout(this);
                layout.setOrientation(LinearLayout.VERTICAL);
                layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,(100/playercountint)));
                layout.setGravity(Gravity.CENTER_HORIZONTAL);
    final TextView tt = new TextView(this);
                tt.setText("0");
                tt.setTextSize(14);
                tt.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                tt.setGravity(Gravity.CENTER_HORIZONTAL);
    
    
                Button btadd = new Button(this);
                btadd.setText("Add");
                btadd.setId(2);
    
    
                btadd.setOnClickListener(new View.OnClickListener() {
                     public void onClick(View v) {
                        tt.setText(String.valueOf(Integer.parseInt(tt.getText())+1));
                     }
                 });
    }
    

    您可以编写一个返回线性布局的函数:

    public View getPlayerView(){
        LinearLayout layout = new LinearLayout(this);
                    layout.setOrientation(LinearLayout.VERTICAL);
                    layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,(100/playercountint)));
                    layout.setGravity(Gravity.CENTER_HORIZONTAL);
        final TextView tt = new TextView(this);
                    tt.setText("0");
                    tt.setTextSize(14);
                    tt.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                    tt.setGravity(Gravity.CENTER_HORIZONTAL);
    
    
                    Button btadd = new Button(this);
                    btadd.setText("Add");
                    btadd.setId(2);
    
    
                    btadd.setOnClickListener(new View.OnClickListener() {
                         public void onClick(View v) {
                            tt.setText(String.valueOf(Integer.parseInt(tt.getText())+1));
                         }
                     });
               layout.add(tt);
               layout.add(btadd);
         return layout;
    }
    

    循环调用这个函数。

    【讨论】:

      【解决方案2】:
      tt.setText("something");
      tt.invalidate();
      

      糟糕的是,我什至没有注意到它是一个 for 循环,呃,您需要保留对文本视图的引用.. 使您的 textview 最终化

      【讨论】:

      • 我相信您必须先将 textView 设置为最终版本,然后才能将其放入 onClick 函数中。
      • 我猜你不能只喜欢引用之前创建的对象,但不知何故需要找到它。描述资源路径位置类型不能在不同方法中定义的内部类中引用非最终变量tt
      【解决方案3】:
      tt.setText(Integer.parse(tt.getText().toString()) + 1);
      

      但是,我强烈建议您在 *.xml 文件中设计 UI(布局)! 查看更多:http://developer.android.com/guide/topics/ui/declaring-layout.html

      【讨论】:

      • 是的,但我的布局取决于玩家人数,有什么建议吗?我是 Android 开发新手
      • Integer.parseInt(...);
      • 这不会起作用,因为 tt.setText() 需要字符串的资源 ID。您必须改为设置字符串
      • @waplet: 没问题,玩家计数在UI中没有生效,它只是数据。这是您的情况的算法:首先,您通过 tt.getText().toString() 获取当前数字,然后通过 Integer.parseInt(String str) 将其转换为 int,增加它,然后 tt.setText(String.valueof (整数整数))。 *提示:如果您使用 Eclipse,请键入 Ctrl+空格 以获得有关代码的建议。幸运!
      【解决方案4】:

      您应该为您的TextView 提供一个唯一的id (.setId(...))。有了这个,在你的 onClick 方法中简单地使用这样的东西:

      final TextView tv = (TextView) findViewById(R.id.your_textview_id);
      final String cur_text = tv.getText();
      Integer plus_one = Integer.valueOf(cur_text);
      plus_one++;
      tv.setText(plus_one.toString());
      

      没试过,但应该可以。

      【讨论】:

        【解决方案5】:
        static int counter = 0;
        
            btn_Add.setOnClickListener(new View.OnClickListener() {
        
                    @Override
                    public void onClick(View v) {
                        counter ++;
                    tv_Display.setText("Your Total is : " + counter);
        
                    }
                });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-27
          • 2020-12-30
          • 2018-11-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多