【问题标题】:make text view for every item in Arraylist为 Arraylist 中的每个项目创建文本视图
【发布时间】:2016-12-23 13:53:07
【问题描述】:

我正在制作将字符串数组列表发送到另一个活动的应用程序,在另一个活动中,它需要所有项目并为每个项目创建文本视图,但我不知道该怎么做。

这是我的第一个活动代码:

package com.TOF.versus;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity{
    Button exitBtn;
    EditText namesTxt;
    TextView namesNumber;
    Button namesBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        exitBtn=(Button) findViewById(R.id.exitBtn);
        exitBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        namesNumber=(TextView)findViewById(R.id.namesNumber);
        namesTxt = (EditText) findViewById(R.id.namesTxt);
        namesBtn=(Button)findViewById(R.id.namesBtn);
        inputName();
    }
    public void inputName(){
        final ArrayList <String> names= new ArrayList<String>();
        namesTxt.setSingleLine();
        namesTxt.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                    names.add(namesTxt.getText().toString());
                    namesNumber.setText(Integer.toString(names.size()));
                    namesTxt.setText("");
                    namesBtn.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            Intent send = new Intent(v.getContext(), Names.class);
                            send.putStringArrayListExtra("E",names);
                            startActivity(send);
                        }
                    });
                }
                return false;
            }});}} 

这是我不知道如何制作文本视图的第二个活动代码:

package com.TOF.versus;


import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;

public class Names extends AppCompatActivity {
    Button backBtn;
    RelativeLayout names_layout;
    protected void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.names_layout);
        backBtn=(Button)findViewById(R.id.backBtn);
        backBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        names_layout=(RelativeLayout) findViewById(R.id.db2_root);
        TextView text=new TextView(this);
        Intent recv=getIntent();
        ArrayList<String> str= recv.getStringArrayListExtra("E");
        text.setText(str.get());
        text.setLayoutParams(new ActionBar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
        names_layout.addView(text);
        System.out.println(str);
}
}

【问题讨论】:

  • 为什么不在名称活动中使用列表视图?

标签: android


【解决方案1】:

您需要循环使用您从中获得的列表创建的 ArrayList 意图。

ArrayList<String> str= recv.getStringArrayListExtra("E");

for (int i = 0; i < str.size(); i++) {
        TextView text = new TextView(this);
        text.setText(str.get(i));
        text.setLayoutParams(new          
ActionBar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
        names_layout.addView(text);
}

所以这会循环通过 str ArrayList,创建 TextView 的新实例,获取与数组中该位置对应的字符串,设置文本、布局参数,然后将其添加到您的布局中。

编辑

如果您要动态添加视图,我建议使用 LinearLayout 并为其分配方向,而不是使用 RelativeLayout 来表示 names_layout,除非您学习如何应用规则。

示例取自How do I specify layout_below programmatically for a LinearLayout?

RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
relativeParams.addRule(RelativeLayout.BELOW, idOfTheViewBelow);

编辑 2

LinearLayout和RelativeLayout有什么区别?

这应该提供足够的信息让你理解

  1. What are the differences between LinearLayout, RelativeLayout, and AbsoluteLayout?
  2. LinearLayout example

【讨论】:

  • linearLayout和RelativeLayout有什么区别
猜你喜欢
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多