为Arraylist中的每个项目创建文本视图

时间:2016-12-23 13:53:08

标签: android

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

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

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);
}
}

1 个答案:

答案 0 :(得分:2)

您需要循环使用您获得的列表创建的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的新实例,获取对应于数组中该位置的字符串,设置文本,布局参数然后添加它&#39 ; s到你的布局。

修改

如果您要动态添加视图,我建议您使用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