我想动态地开发一个列表视图,就在点击的视图下方。 我动态创建了3个TextView。现在,在应用单击任何文本视图后,列表视图需要显示在所选文本视图的正下方。现在的问题是,我成功地获得了动态创建的textview,但无法在所需位置获取listview。如果有人能够提供帮助,请帮助我。
我的代码如下: -
public class MainActivity extends Activity implements View.OnClickListener,AdapterView.OnItemClickListener {
String []menu={"One","Two","three"};
String [] submenu={"One","Two","Three"};
TextView tv1;
ListView list1;
LinearLayout latout;
ArrayAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
latout=(LinearLayout)findViewById(R.id.layout);
adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,submenu);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(20,10,10,0);
for(int i=0;i<3;i++) {
tv1 = new TextView(getApplicationContext());
tv1.setText(menu[i]);
tv1.setTag(i);
tv1.setId(i);
tv1.setTextSize(20);
tv1.setTextColor(getResources().getColor(R.color.primary_material_dark));
//tv1.setGravity();
tv1.setBackground(getResources().getDrawable(R.drawable.txtview_background,null));
latout.addView(tv1,params);
list1=new ListView(getApplicationContext());
list1.setVisibility(View.GONE);
list1.setId(i+100);
list1.setAdapter(adapter);
latout.addView(list1,params);
}
tv1.setOnClickListener(this);
list1.setOnItemClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case 1:
//list1.setAdapter(adapter);
list1.setVisibility(View.VISIBLE);
break;
case 2:
list1.setVisibility(View.VISIBLE);
break;
case 3:
list1.setVisibility(View.VISIBLE);
break;
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
}
我的xml是
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" android:id="@+id/layout"
android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity">
</LinearLayout>
好吧,我确定了所需的列表视图,只点击了最后一项......图片链接在下面
答案 0 :(得分:1)
好吧,我确定了所需的列表视图,只点击了最后一项......图片链接在下面
问题:只有第三个TextView
有点击监听器;对列表的引用也指向for循环后的第三个ListView
。
解决方案:将点击监听器设置为for循环中的每个TextView
,并且可能会为点击逻辑保留ListView
的数组:
ListView lists = new ListView[3];
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
for(int i = 0; i < 3; i++) {
TextView tv = new TextView(this);
tv.setText(menu[i]);
tv.setTag(i);
tv.setId(i);
tv.setTextSize(20);
tv.setTextColor(getResources().getColor(R.color.primary_material_dark));
tv.setBackground(getResources().getDrawable(R.drawable.txtview_background,null));
latout.addView(tv, params);
lists[i] = new ListView(this);
lists[i].setVisibility(View.GONE);
lists[i].setId(i + 100);
lists[i].setAdapter(adapter);
latout.addView(lists[i],params);
// Inside for-loop
tv.setOnClickListener(this);
lists[i].setOnItemClickListener(this);
}
}
@Override
public void onClick(View v) {
// Needs some error checking on getId()
lists[v.getId()].setVisibility(View.VISIBLE);
}
答案 1 :(得分:0)
你只在底部获得了listview,因为你在那里添加了它,你将不得不使用:
latout.addView(list1, index)
其中 index 是线性布局内的位置。 此外,如果您在第一个TextView之后进行操作,则索引为1,之后为2,依此类推......
当用户点击时必须调用该代码,以便您知道哪个TextView,因此您将知道索引。