如何在点击的视图下方动态创建ListView?

时间:2015-07-19 08:01:32

标签: android

我想动态地开发一个列表视图,就在点击的视图下方。 我动态创建了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>

好吧,我确定了所需的列表视图,只点击了最后一项......图片链接在下面

https://goo.gl/photos/gQfSrjXdHxqd5fTs6

2 个答案:

答案 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,因此您将知道索引。