在ListView中动态创建按钮[android]

时间:2016-05-01 22:04:02

标签: java android xml android-layout listview

我正在尝试创建一个简单的应用程序,其中最初只显示一个按钮。 我想要做的是每当用户点击它时,下面会出现另一个(可点击的)按钮。 我一直在尝试使用此代码,但它似乎无法正常工作(存在NullPointerException)......互联网无法提供帮助。 这是我的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:background="#ffc1c1"
    android:orientation="vertical">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="0dp"
        android:id="@+id/add"
        android:text="add button"
        android:paddingStart="@dimen/activity_horizontal_margin"/>
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView">
    </ListView>
</LinearLayout>

..这里是我的java代码:

public class ListButtonActivity extends AppCompatActivity {

    private ListView listView;
    private Button add;
    private Button b1, b2, b3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

        add = (Button) findViewById(R.id.add);
        final Button[] statesList = {b1,b2,b3};
        b1 = add;
        b2 = add;
        b3 = add;
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listView = (ListView) findViewById(R.id.listView);

                ArrayAdapter<Button> adapter = new ArrayAdapter<Button>(chatActivity.this,
                        android.R.layout.simple_list_item_1, android.R.id.text1, statesList);
                listView.setAdapter(adapter);
            }
        });

    }

}

3 个答案:

答案 0 :(得分:0)

你做得太少太少了。 只需从您的布局中删除列表视图。而是添加另一个按钮,但将其可见性更改为false。 并且,当用户单击该按钮时,将其可见性更改为true

布局:

<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical"
tools:context="com.example.charlie.testandroidstudioinmac.MainActivity">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="My Button1"
    android:onClick="btn1Clicked"
    android:id="@+id/button" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="My second Button"
    android:visibility="invisible"
    android:id="@+id/button2" />
</LinearLayout>

您的活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void btn1Clicked(View view){
    Button btn2 = (Button) findViewById(R.id.button2);
    btn2.setVisibility(View.VISIBLE);
}

但是如果必须使用ListView,则需要使用CustomAdapter而不是

 android.R.layout.simple_list_item_1 //this is predefined for textonly listviews

答案 1 :(得分:0)

您需要向stateslist添加新项目。之后,您需要显示已添加新项目的适配器。

为此,只需在适配器中使用方法notifyDataSetChanged(),即可添加新项目。

答案 2 :(得分:0)

确定。 仍然不需要列表视图,ListView对于新用户来说有点复杂。 只需添加此布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Create New Button"
    android:onClick="createBtnClicked"
    android:id="@+id/button2" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scrollView" >

    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/ll_btns"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </LinearLayout>
</ScrollView>

在你的MainActivity.java上:

public class MainActivity extends AppCompatActivity {
LinearLayout ll;
int cont=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_buttons);

    ll = (LinearLayout) findViewById(R.id.ll_btns);

}

public void createBtnClicked(View v){
    Button btn = new Button(this);
    btn.setText("tbn "+cont++);
    ll.addView(btn);
}

有..你可以添加尽可能多的按钮,因为Android内存可以支持。