简体   繁体   English

如何在android studio中单击按钮添加行到listView?

[英]How to add row to listView on button click in android studio?

I am using a custom adapter for my ListView which I already don't understand as much as I would like to. 我正在为ListView使用自定义适配器,但我ListView理解不尽如人意。 I can find information online on how to add a row to ListView but it doesn't integrate nicely into my code, I'm guessing because I'm using a custom adapter. 我可以在网上找到有关如何将行添加到ListView但是由于我使用的是自定义适配器,所以它不能很好地集成到我的代码中。 I have my setOnClickListener() method for my button in my Main Activity and have been experimenting there but just cant figure it out I'm also not sure if my method is in the right place? 我的主要活动中有我的按钮的setOnClickListener()方法,并且在那里进行了试验,但无法弄清楚我也不确定我的方法是否在正确的位置?

this is the mainActivity 这是mainActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

import static java.util.logging.Logger.global;

public class MainActivity extends Activity {

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

        final String[] Chores = {""};
        ListAdapter MyAdapter = new CustomAdapter(this, Chores);
        ListView listViewObject = (ListView)findViewById(R.id.customListView_ID);
        listViewObject.setAdapter(MyAdapter);

        listViewObject.setOnItemClickListener(
            new AdapterView.OnItemClickListener(){
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id){
                    String ChoreString = String.valueOf(parent.getItemAtPosition(position));


                }
            }

        );

 // this is where I am trying to have button click add another row to my listView    
         final Button button = (Button) findViewById(R.id.button_ID);
         button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 //this is where I am stuck

            }

        });

    }
}

here is my CustomAdapter class 这是我的CustomAdapter类

import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;


class CustomAdapter extends ArrayAdapter{

    public CustomAdapter(Context context, String[] choreText) {
        super(context, R.layout.custon_listview_row, choreText);
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater myInflater = LayoutInflater.from(getContext());
        View customView = myInflater.inflate(R.layout.custon_listview_row, parent, false);

        String singleListItem = (String) getItem(position);
        EditText choreText = (EditText) customView.findViewById(R.id.editText_ID);
        ImageButton imageButton = (ImageButton) customView.findViewById(R.id.imageButton_ID);

        choreText.setText(singleListItem, TextView.BufferType.EDITABLE);



        imageButton.setImageResource(R.drawable.clock);

        return customView;
    }
}

activity_main.xml activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    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="com.example.emilythacker.chorelist.MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/customListView_ID"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="50dp" />

    <Button
        android:text="Add Chore"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:id="@+id/button_ID" />
</RelativeLayout>

and custom_listview_row.xml 和custom_listview_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="60dp">

    <ImageButton
        android:layout_width="60dp"
        android:scaleType="fitCenter"
        app:srcCompat="@drawable/clock"
        android:id="@+id/imageButton_ID"
        android:layout_height="60dp"
        android:background="@null"
        android:layout_alignParentRight="true"
        android:padding="5dp"
        android:layout_weight="1" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:id="@+id/editText_ID"
        android:layout_alignParentLeft="true"
        android:alpha = ".5"
        android:hint="Enter chore"
        android:maxLines="1"
        android:inputType="text"
         />

</RelativeLayout>
        public void onClick(View v) {

            String stringToAdd = ... // 
            MyAdapter.add(stringToAdd);
        }

You will need to add final to the adapter declaration for this to work: 您需要将final添加到适配器声明中,以使其工作:

        final ListAdapter MyAdapter = new CustomAdapter(this, Chores);

EDIT 编辑

To add more than one row at a time: 一次添加多个行:

        public void onClick(View v) {

            String[] rowsToAdd = ... // 
            MyAdapter.addAll(rowsToAdd);
        }

First make your list into an ArrayList instead of String array. 首先将您的列表放入ArrayList而不是String数组。

private ArrayList<String> arrayList;

In the buttons onClick 在按钮上点击

arrayList.add("New Item");
((ArrayAdapter)MyAdapter).notifyDataSetChanged();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM