Android 创建多个文本视图并动态为其赋值
我有一个显示联系人姓名的列表视图。有更多的值与listview关联。当我按下listview中的行时,我将Hashmap发送到其他活动,并根据Hashmap大小动态创建TextView,并将值分配给动态创建的TextView,如Name、Email、PhoneNo listview.OnItemClickListnerAndroid 创建多个文本视图并动态为其赋值,android,textview,dynamic-text,Android,Textview,Dynamic Text,我有一个显示联系人姓名的列表视图。有更多的值与listview关联。当我按下listview中的行时,我将Hashmap发送到其他活动,并根据Hashmap大小动态创建TextView,并将值分配给动态创建的TextView,如Name、Email、PhoneNo listview.OnItemClickListner mListView.setOnItemClickListener(new OnItemClickListener() { @Override p
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long id) {
// TODO Auto-generated method stub
@SuppressWarnings("unchecked")
HashMap<String, String> o = (HashMap<String, String>) mListView.getItemAtPosition(position);
Intent i = new Intent (Contacts.this , Contacts_Detail.class);
i.putExtra("HASHMAP", o);
startActivity(i);
}
});
mListView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(适配器视图arg0、视图视图、内部位置、,
长id){
//TODO自动生成的方法存根
@抑制警告(“未选中”)
HashMap o=(HashMap)mListView.getItemAtPosition(位置);
意向i=新意向(Contacts.this,Contacts\u Detail.class);
i、 putExtra(“HASHMAP”,o);
星触觉(i);
}
});
联系人详细信息类
public class Contacts_Detail extends Activity {
LinearLayout mLinearlayout;
TextView rowTextView;
HashMap<String, String> ModuleName;
ArrayList<String> KEY;
List<TextView> allTxts;
private LayoutInflater inflater;
View layout;
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
mLinearlayout = (LinearLayout) findViewById(R.id.LinearLayout);
Bundle extras = getIntent().getExtras();
if (extras != null)
{
//map = HashMap<String, String>>getIntent().getSerializableExtra("MODULE_LIST");
ModuleName = (HashMap<String, String>) extras.getSerializable("HASHMAP");
//KEY = (ArrayList<String>) extras.getSerializable("KEY");
}
else
{
Toast.makeText(getApplicationContext(), "No Data Found", Toast.LENGTH_LONG).show();
return;
}
int N = ModuleName.size(); // total number of textviews to add
final TextView[] myTextViews = new TextView[N]; // create an empty array;
allTxts = new ArrayList<TextView>();
for (int i = 0; i < N; i++) {
// create a new textview
rowTextView = new TextView(this);
allTxts.add(rowTextView);
// set some properties of rowTextView or something
rowTextView.setText("This is TextView #" + i);
rowTextView.setId(i);
// add the textview to the linearlayout
mLinearlayout.addView(rowTextView);
// save a reference to the textview for later
myTextViews[i] = rowTextView;
}
}}
public class Contacts\u详细信息扩展活动{
线性布局;
文本视图行文本视图;
HashMap模块名;
ArrayList键;
列出所有TXT;
私人充气机;
视图布局;
@抑制警告(“未选中”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_测试);
mLinearlayout=(LinearLayout)findViewById(R.id.LinearLayout);
Bundle extras=getIntent().getExtras();
如果(附加值!=null)
{
//map=HashMap>getIntent().getSerializableExtra(“模块列表”);
ModuleName=(HashMap)extras.getSerializable(“HashMap”);
//KEY=(ArrayList)extras.getSerializable(“KEY”);
}
其他的
{
Toast.makeText(getApplicationContext(),“未找到数据”,Toast.LENGTH_LONG.show();
返回;
}
int N=ModuleName.size();//要添加的文本视图总数
final TextView[]mytextview=new TextView[N];//创建一个空数组;
allTxts=newarraylist();
对于(int i=0;i
如您所见,所有文本视图都已成功创建。但我想为所有动态创建的文本视图分配HASHMAP值。
如何做到这一点
我可以使用布局充气机的概念吗
提前感谢试试这个
在您的for
循环之前添加
Set<String> keys = ModuleName.keySet();
String[] values = new String[N];
int i = 0;
for (String key : keys) {
values[i] = ModuleName.get(key);
i++;
}
希望有帮助。Set keys=ModuleName.keySet();
Set<String> keys = ModuleName.keySet();
String[] values = new String[N];
int i = 0;
for (String key : keys) {
values[i] = ModuleName.get(key);
i++;
}
for (int i=0;i<values .length;i++)
{
final int index =i;
LinearLayout child_insidenew_layout = new LinearLayout(this);
child_insidenew_layout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams child_inside_paramsnew = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
child_insidenew_layout.setLayoutParams(child_inside_paramsnew);
child_insidenew_layout.setGravity(Gravity.CENTER_VERTICAL);
child_insidenew_layout.setBackgroundResource(R.drawable.layout_selector);
TextView textview = new TextView(this);
LinearLayout.LayoutParams image_params = new LinearLayout.LayoutParams(imageWidth,imgHeight);
image_params.setMargins(margin,margin, margin, margin);
child_insidenew_layout.addView(textview, image_params);
TextView textrootname = new TextView(getActivity());
LinearLayout.LayoutParams TextView_params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
textrootname.setSingleLine(true);
textrootname.setEllipsize(TruncateAt.MARQUEE);
textrootname.setFocusableInTouchMode(true);
textrootname.setFreezesText(true);
textrootname.setMarqueeRepeatLimit(-1);
textrootname.setFocusable(true);
textrootname.setSelected(true);
textrootname.settext("values indeax of i" )
textrootname.setGravity(Gravity.CENTER);
textrootname.setTextColor(Color.BLACK);
textrootname.setTextSize(15);
child_insidenew_layout.addView(textrootname, TextView_params);
child_inside_layout.addView(child_insidenew_layout, child_inside_paramsnew);
}
字符串[]值=新字符串[N];
int i=0;
用于(字符串键:键){
值[i]=ModuleName.get(键);
i++;
}
对于(int i=0;我为什么不创建单个textview并使用append或uselistview@Raghunandan之后,我与这些文本视图有很多关系。不能使用listview。@BhanuSharma没有明白你的意思。!亲爱的,你完成了吗?我想我的代码正在帮助uIt工作,但它正在设置Hashmap的键集。而不是它们的值。@MohitRakhra对于(Map.Entry:ModuleName.entrySet()){String key=(String)Entry.getKey();Log.i(“…”,“+ModuleName.get(key));}
使用该键获取值并设置文本,如textview.setText(ModuleName.get(key).toString()
@MohitRakhra值[i]
是键。您需要使用键从映射中获取值,如ModuleName.get(值[i])
rowTextView.setText(ModuleName.get(值[i]))
@MohitRakhra 1更多建议为什么你需要这么多文本视图。这不好,你以后打算对文本视图做什么。我建议listview,它可以循环使用views@Raghunandan:是的,我忘了从键中获取值。我的不好。编辑我的答案。谢谢。您在哪里使用哈希映射将文本设置为文本视图亲爱的我不是wri整个代码只是根据这个for循环读取hashmap,然后写textview.settext(“你的hash值”);简单的亲爱的:)这就是op要找的,这就是问题所在,你还没有回答这个问题亲爱的:)Set keys=ModuleName.keySet();字符串[]值=新字符串[N];int i=0;对于(String key:keys){values[i]=ModuleName.get(key);i++;}我想他也在寻找如何动态添加该视图,这样我就很忙,所以没有得到正确的结果,所以我给出了所有代码:)
Set<String> keys = ModuleName.keySet();
String[] values = new String[N];
int i = 0;
for (String key : keys) {
values[i] = ModuleName.get(key);
i++;
}
for (int i=0;i<values .length;i++)
{
final int index =i;
LinearLayout child_insidenew_layout = new LinearLayout(this);
child_insidenew_layout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams child_inside_paramsnew = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
child_insidenew_layout.setLayoutParams(child_inside_paramsnew);
child_insidenew_layout.setGravity(Gravity.CENTER_VERTICAL);
child_insidenew_layout.setBackgroundResource(R.drawable.layout_selector);
TextView textview = new TextView(this);
LinearLayout.LayoutParams image_params = new LinearLayout.LayoutParams(imageWidth,imgHeight);
image_params.setMargins(margin,margin, margin, margin);
child_insidenew_layout.addView(textview, image_params);
TextView textrootname = new TextView(getActivity());
LinearLayout.LayoutParams TextView_params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
textrootname.setSingleLine(true);
textrootname.setEllipsize(TruncateAt.MARQUEE);
textrootname.setFocusableInTouchMode(true);
textrootname.setFreezesText(true);
textrootname.setMarqueeRepeatLimit(-1);
textrootname.setFocusable(true);
textrootname.setSelected(true);
textrootname.settext("values indeax of i" )
textrootname.setGravity(Gravity.CENTER);
textrootname.setTextColor(Color.BLACK);
textrootname.setTextSize(15);
child_insidenew_layout.addView(textrootname, TextView_params);
child_inside_layout.addView(child_insidenew_layout, child_inside_paramsnew);
}