首页 文章

保存编辑到listview android studio

提问于
浏览
1

我有一个列表视图的餐馆有4个不同的字符串:名称,地址,描述和标签 . 当我点击餐馆时它会引导我到我的 detailsActivity.java ,我让用户编辑名称,地址,描述和标签,然后用户可以保存编辑后的信息以存储在列表视图中 .

到目前为止,当我点击保存时,它只会保存名称的数据...地址,描述和标签字符串不会保存新信息 .

这是我的代码:

public class DetailsActivity extends AppCompatActivity {

    private int pos;
    //RATE RESTAURANT BUTTON
    RatingBar ratingbar1;
    Button button;


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

        Intent i = getIntent();
        String name = i.getStringExtra("name");
        final String address = i.getStringExtra("address");
        String description = i.getStringExtra("description");
        String tags = i.getStringExtra("tags");
        pos = i.getIntExtra("position", -1);        //-1 means not set

        EditText ename = findViewById(R.id.editName);
        EditText eaddress = findViewById(R.id.editAddress);
        EditText edescription = findViewById(R.id.editDescription);
        EditText etags = findViewById(R.id.editTags);
        ename.setText(name);
        eaddress.setText(address);
        edescription.setText(description);
        etags.setText(tags);

        findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent i = getIntent();
                EditText ename = findViewById(R.id.editName);
                EditText eaddress = findViewById(R.id.editAddress);
                EditText edescription = findViewById(R.id.editDescription);
                EditText etags = findViewById(R.id.editTags);

                String name = ename.getText().toString();
                String address = eaddress.getText().toString();
                String description = edescription.getText().toString();
                String tags = etags.getText().toString();

                i.putExtra("name", name);
                i.putExtra("address", address);
                i.putExtra("description", description);
                i.putExtra("tags", tags);
                i.putExtra("position", pos);

                setResult(RESULT_OK, i);
                finish();
            }
        });

以下是我的xml文件,以防需要它们:

activity_details.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DetailsActivity"
    tools:layout_editor_absoluteY="25dp">

    <EditText
        android:id="@+id/editName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:ems="10"
        android:hint="Restaurant Name"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editAddress"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="Restaurant Address (Street #, City) (***)-***-****"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editName" />

    <EditText
        android:id="@+id/editDescription"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="Restaurant Description"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editAddress" />

    <EditText
        android:id="@+id/editTags"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="4dp"
        android:ems="10"
        android:hint="tags"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.503"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editDescription" />

    <Button
        android:id="@+id/btnSave"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Save"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTags" />

    <Button
        android:id="@+id/btnMap"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Map"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnSave" />

    <Button
        android:id="@+id/btnBack"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Back"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnMap" />

    <RatingBar
        android:id="@+id/rating1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnBack"/>
<Button
    android:id="@+id/btnRate"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="Rate"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/rating1" />

这是listview所在的activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/btnabout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="512dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="about us"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.909"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />


    <EditText
        android:id="@+id/editItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:ems="10"
        android:hint="New Item"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:text="Add"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/editItem" />

    <ListView
        android:id="@+id/itemList"
        android:layout_width="match_parent"
        android:layout_height="433dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toTopOf="@+id/editItem"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0" >

    </ListView>
</android.support.constraint.ConstraintLayout>

最后是mainactivity.java,其中包含我的onActivityResult函数:

public class MainActivity extends AppCompatActivity {

    private ArrayList<Item> items;
    private ItemsAdapter itemsAdapter;
    private ListView lvItems;

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

        lvItems = findViewById(R.id.itemList);
        items = new ArrayList<>();
        items.add(new Item ("Mcdonalds", "108 queen st", "come get a junior chicken", "fast food"));
        items.add(new Item("Pizza Pizza", "9 moms st", "wonderful pizza made by mom", "pizza"));

        itemsAdapter = new ItemsAdapter(this, R.layout.row_layout, items);
        lvItems.setAdapter(itemsAdapter);

        Button btn = findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //ADD NEW ITEM TO LIST
                EditText et = findViewById(R.id.editItem);
                String text = et.getText().toString();
                if(!text.isEmpty())
                {
                    itemsAdapter.add(new Item(text, "default address", "default desc", "default tag"));
                    et.setText("");
                }
            }
        });


        //ABOUT PAGE REDIRECT
        Button btn1 = findViewById(R.id.btnabout);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this,aboutmembers.class);
                startActivity(i);
            }
        });


        //INTERACTION WITH LIST ITEMS (LONG CLICK TO DELETE)
        lvItems.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {

                final int pos = position;

                new AlertDialog.Builder(view.getContext()).setTitle("Warning!")
                        .setMessage("Do you want to remove this item?")
                        .setNegativeButton(android.R.string.no, null)
                        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                items.remove(pos);
                                itemsAdapter.notifyDataSetChanged();
                            }
                        }).show();
                return true;

            }
        });

        //ADD NEW LISTENER TO LIST
        lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Intent i = new Intent(view.getContext(), DetailsActivity.class);
                i.putExtra("position", position);
                i.putExtra("name", items.get(position).getName());
                i.putExtra("address", items.get(position).getAddress());
                i.putExtra("description", items.get(position).getDescription());
                i.putExtra("tags", items.get(position).getTags());
                startActivityForResult(i, EDIT_ITEM);

            }
        });

    }




    //DEFINE OUR CALL OF EDIT ITEM
    public static final int EDIT_ITEM = 1;

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

        if(requestCode==EDIT_ITEM)
        {
            if(resultCode==RESULT_OK)
            {

                int pos = data.getIntExtra("position", -1);
                if(pos!=-1)
                {
                    String name = data.getStringExtra("name");
                    String address = data.getStringExtra("address");
                    String description = data.getStringExtra("description");
                    String tags = data.getStringExtra("tags");
                    Item item = items.get(pos);
                    item.setName(name);
                    items.set(pos, item);
                    itemsAdapter.notifyDataSetChanged();

                }

            }
        }


    }

1 回答

  • 0

    在onActivityResult函数的mainactivity.java中设置地址/ description / tags:

    item.setAddress((address));
    item.setDescription(description);
    item.setTags(tags);
    

相关问题