【问题标题】:Unable to set TextView programatically无法以编程方式设置 TextView
【发布时间】:2022-02-02 09:45:51
【问题描述】:

我想在我的线性布局中显示三个单独的文本视图列表。我知道这可以从 XML 文件本身完成,但我想动态生成这些文本视图。

XML 文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:card_view="http://schemas.android.com/apk/res-auto" 
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
 android:id = "@+id/ll1">
    </LinearLayout>

Java 文件:

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;

import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RegistrationActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle saved){
        LinearLayout ll = findViewById(R.id.ll1);
        super.onCreate(saved);
        setContentView(R.layout.activity_reg);
        List<String> names = new ArrayList<>(Arrays.asList("Negotiation","Pyschology","Joke"));
        for (int i = 0; i<3;++i){
            TextView dynamic = new TextView(this);
            dynamic.setText(names.get(i));
            dynamic.setTextSize(14);
            dynamic.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    startActivity(new Intent(RegistrationActivity.this, MainActivity.class));

                }
            });
            ll.addView(dynamic);


        }

    }
}

结果是一个空白页面,我想要的是三个可点击的文本视图作为结果。我哪里做错了?

【问题讨论】:

  • 仍然是一种非常可怕的方法,为什么不使用 recyclerview 呢?
  • 我没有看到任何yourLinearLayout.addView(yourTextView) 以便将生成的文本视图添加到线性布局。
  • 我会推荐你​​使用 RecyclerView 但如果你想通过这种方法添加这一行 yourLinearLayout.addView(dynamic)` `
  • @a_local_nobody 太复杂了。

标签: java android android-studio


【解决方案1】:

如果我没记错,先生,您想以编程方式添加文本视图

发现你需要一个layout父布局你的父布局是Linear layout set id of a linear layout 假设id是linerlayout_parent 这个在Activity之后

LinearLayout linearview =  findViewById(R.id.linerlayout_parent);

现在在这里以编程方式创建文本视图

        TextView title=new TextView(Activity.this);
       title.setTextSize(20);
       title.setTextAppearance(context,R.font.abhaya_libre_bold);
       title.setPadding(10,10,10,10);
       title.setTextColor(Color.BLACK);
       title.setText("Hello use this code");
       linearview.addView(title);

如果您需要三个比循环粘贴此代码 请设置线性布局垂直的方向

【讨论】:

  • 我这样做了,我得到了这个错误,"Attempt to invoke virtual method 'void android.widget.LinearLayout.addView(android.view.View)' on a null object reference at com.kenadams.app.RegistrationActivity.onCreate(RegistrationActivity.java:39)"这恰好是linearview.addView(title)。我还添加了一个 onclicklistener
  • 你使用 findviewbyid 吗?确保您使用的线性布局的 id 与 xml id 相同?这个可以吗 ?而不是粘贴你最近的代码
  • 我已将新代码粘贴到我的问题中
  • 请先写这个 super.onCreate(saved);比这一行 LinearLayout ll = findViewById(R.id.ll1);
【解决方案2】:

可能是你忘记在 parentview 中添加 textview 了。

  tv[i] = new TextView(this); 
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams
     ((int)LayoutParams.WRAP_CONTENT,(int)LayoutParams.WRAP_CONTENT);
params.leftMargin = 50;
params.topMargin  = i*50;
tv[i].setText(str[i]);
tv[i].setTextSize((float) 20);
tv[i].setPadding(20, 50, 20, 50);
tv[i].setLayoutParams(params);
rl.addView(tv[i]);  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 2011-12-16
    • 2018-02-02
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2013-11-29
    • 2017-10-20
    相关资源
    最近更新 更多