如何在每次单击Button时将项添加到ListView

时间:2015-07-07 21:03:25

标签: java android android-listview android-button

这是我正在处理的代码,它应该在每次单击Button时在ListView(w /数组)中添加一个项目。每次单击Button时,用户在EditText上插入的文本都应添加到列表中。

我发现这行代码:

new Button.OnClickListener()

被视为一个匿名的'事情,它没有运行,请帮助我;(

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.*;
import android.widget.*;
import java.lang.*;
import java.util.List;

public class MainActivity extends ActionBarActivity {
//Setup Lists
String[] arrayNames;
ListView listNames;
TextView namesText;

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

    //Creating and Printing Lists
    listNames = (ListView) findViewById(R.id.listNamesId);
    namesText = (TextView) findViewById(R.id.namesTexter);
    final ArrayAdapter<String> adapterNames = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, (List<String>) namesText);

    Button buttonPlus = (Button)findViewById(R.id.buttonPlus);
    buttonPlus.setOnClickListener(
            new Button.OnClickListener() {
                public void onClick(View v) {
                    listNames.setAdapter(adapterNames);
                }
            }
    );
}

XML

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">


<ListView
    android:id="@+id/listNamesId"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="#000"
    android:dividerHeight="1dp"
    android:headerDividersEnabled="true"
    android:layout_marginTop="50dp"></ListView>

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/textnametextname"
    android:id="@+id/buttonPlus"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:nestedScrollingEnabled="false" />

<EditText
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:id="@+id/namesTexter"
    android:layout_alignBottom="@+id/buttonPlus"
    android:layout_centerHorizontal="true"
    android:inputType="text" />

4 个答案:

答案 0 :(得分:1)

问题不在于您的按钮单击侦听器,而是您没有使用List作为适配器的数据源。

我刚刚使用ArrayList作为数据源,并在按钮单击侦听器中更新它。每次单击该按钮时,EditText中的任何内容都会添加到ListView。

public class MainActivity extends ActionBarActivity {

    ArrayList<String> arrayNames = new ArrayList<String>();
    ListView listNames;
    TextView namesText;


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


        //Creating and Printing Lists
        listNames = (ListView) findViewById(R.id.listNamesId);
        namesText = (TextView) findViewById(R.id.namesTexter);
        final ArrayAdapter<String> adapterNames = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, arrayNames);
        listNames.setAdapter(adapterNames);

        Button buttonPlus = (Button)findViewById(R.id.buttonPlus);

        buttonPlus.setOnClickListener(
                new Button.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        arrayNames.add(0, namesText.getText().toString());
                        adapterNames.notifyDataSetChanged();
                        namesText.setText("");

                    }
                }
        );


    }

答案 1 :(得分:1)

为了获得你想要的东西,似乎没有意义在onclick中设置适配器。你应该做的是在onClick()方法中添加一个项目,然后在适配器上调用方法notifyDataSetChanged(),以确保显示新数据。

这是代码:

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

    final ListView listNames = (ListView) findViewById(R.id.listNamesId);
    final TextView namesText = (TextView) findViewById(R.id.namesTexter);
    final ArrayAdapter<String> adapterNames = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
    listNames.setAdapter(adapterNames);

    Button buttonPlus = (Button)findViewById(R.id.buttonPlus);
    buttonPlus.setOnClickListener(
        new Button.OnClickListener() {
            public void onClick(View v) {
                if(!namesText.getText().toString().isEmpty()){
                     adapterNames.add(namesText.getText().toString());
                     namesText.setText("");
                     adapterNames.notifyDataSetChanged();
                }

            }
        }
    );

}

答案 2 :(得分:0)

您可以这样做:

public void onMyButtonClick(View view){
        listNames.setAdapter(adapterNames);    
}

在你的xlm文件中

<Button>
 .....
android:onclick="onMyButtonClick"
....

希望这会对你有所帮助。

答案 3 :(得分:0)

看起来namesText是一个TextView。但它在下一行被列为List。

namesText = (TextView) findViewById(R.id.namesTexter);


final ArrayAdapter<String> adapterNames = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, (List<String>) namesText);