【问题标题】:Create different textviews for list of strings为字符串列表创建不同的文本视图
【发布时间】:2019-07-13 07:18:16
【问题描述】:

我有一个类,我使用相机指向一个对象并获取它可以在对象上看到的所有字符串。然后我将列表传递给这个意图,以便用户可以选择一个特定的字符串,然后我将使用它发送到另一个活动。

但是,我想为每个字符串创建一个新的文本视图,然后在每个文本视图上放置一个 OnClickListener,但我不确定如何将 OnClickListener 放在一个我不知道存在的文本视图上根据列表创建。

public class SelectProductName extends AppCompatActivity {
    ArrayList<String> getString = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_product_name);
        getString = getIntent().getStringArrayListExtra("stringList");

        LinearLayout ll = findViewById(R.id.layout_select_product_name);
        for (int i = 0; i < getString.size();i++){
            TextView text = new TextView(this);
            text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
            text.setText(getString.get(i));
            System.out.println(getString.get(i));
            ll.addView(text);
        }
    }
}

例如:getString 是 {"Chicken","Pie"}

我想为每个字符串创建一个文本视图。

我不确定如何获取文本视图的名称以将 OnClickListener 添加到其中。

【问题讨论】:

    标签: java android textview


    【解决方案1】:

    您可以像添加任何视图一样添加侦听器:

    LinearLayout ll = findViewById(R.id.layout);
    for (int i = 0; i < getString.size();i++){
        TextView text = new TextView(this);
        text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
        text.setText(getString.get(i));
        System.out.println(getString.get(i));
        ll.addView(text);
        text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // your code goes here
            }
        }); 
    } 
    

    【讨论】:

    • 如果我每次为列表中的每个单词创建一个新的文本视图,它会覆盖吗?
    • 不,它不会覆盖。
    【解决方案2】:
    public class SelectProductName extends AppCompatActivity implements OnClickListener{
    ArrayList<String> getString = new ArrayList<>();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_product_name);
        getString = getIntent().getStringArrayListExtra("stringList");
    
        LinearLayout ll = findViewById(R.id.layout_select_product_name);
        for (int i = 0; i < getString.size();i++){
            TextView text = new TextView(this);
            text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
            text.setText(getString.get(i));
            System.out.println(getString.get(i));
            ll.addView(text);
            text.setOnClickListener(this);
        }
    }
    public void onClick(View view) {
        TextView tv = (TextView)view;
        Log.i("clicked", tv.getText().toString());
    
    
      }
    }
    

    【讨论】:

    • 是的,我知道该怎么做,但是如果我有 "potato" 、 "pie"、 "chicken" 的单词列表,我正在尝试为每个单词创建一个新的文本视图,如何我可以将 onClick 添加到所有这些文本视图中吗?
    • 我已经在这里编写的代码会将 onClick 添加到在 for 循环中创建的所有文本视图中。您可以在 onclick 方法中编写您的登录信息,并通过“text”('potato','pie')或在使用 setTag 方法创建操作时为每个标签提供的标签来区分 textview
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    相关资源
    最近更新 更多