我正在尝试创建一个简单的应用程序,其中最初只显示一个按钮。 我想要做的是每当用户点击它时,下面会出现另一个(可点击的)按钮。 我一直在尝试使用此代码,但它似乎无法正常工作(存在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);
}
});
}
}
答案 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内存可以支持。