使用按钮从其他活动中删除项目

时间:2014-02-25 09:10:00

标签: android

问题:我想使用其他活动中的按钮从列表视图中删除项目。

我尝试了几种代码,但它似乎没有用。 我知道我使用serializable将对象捆绑到另一个活动。 但我不知道如何从其他活动中删除它。

有人可以帮我吗? 我可以使用第二个活动中的按钮,在第一个活动中从列表视图中删除项目吗?

我得到ListView的A类

public class ListActivity extends Activity {
    ListView list;
    Button exit;
    SimpleAdapter adapter;

    final List<Map<String, String>> data = new ArrayList<Map<String, String>>();

    @Override``
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        list = (ListView) findViewById(R.id.list);
        exit = (Button) findViewById(R.id.btnExit);

        // Registration numbers
        final String[] title = new String[] { "XMT 123", "KLE 456", "CKL 789",
                "MRP 012", "DSV 345" };

        // Name of the truck drivers
        final String[] subtitle = new String[] { "Peter Lund", "Hans Larsson",
                "Erik Petersson", "Bjørn Lundal", "Lars Svensson" };

        for (int i = 0; i < title.length; i++) {
            Map<String, String> datalist = new HashMap<String, String>();
            datalist.put("title", title[i]);
            datalist.put("subtitle", subtitle[i]);
            data.add(datalist);
        }

        // getDataInList();
        adapter = new SimpleAdapter(this, data,
                android.R.layout.simple_list_item_2, new String[] { "title",
                        "subtitle" }, new int[] { android.R.id.text1,
                        android.R.id.text2 });
        list.setAdapter(adapter);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
                Intent intent = new Intent(ListActivity.this,
                        InformationActivity.class);

                intent.putExtra("updateReg", title[position].toString());
                intent.putExtra("updateName", subtitle[position].toString());

            }

        });

        exit.setOnClickListener(new OnClickListener() {

            // Closes the application
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.addCategory(Intent.CATEGORY_HOME);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);

            }
        });

    }

B级,我拿到了接受按钮。 单击“接受”时,应删除A类列表视图中的项目。

public class InformationActivity extends Activity {
    TextView name;
    TextView reg;
    TextView product;
    TextView productNo;
    Button accept;
    Button edit;
    Button exit;
    AlertDialog dialog;
    ListView list;
    String result;
    EditText search;
    int requestCode = 1;

    SimpleAdapter adapter;

    Context context = InformationActivity.this;
    ArrayList<Materials> materialList = new ArrayList<Materials>();

    // Materials
    final static String[] material = new String[] { "Betong", "Grus", "Järn",
            "Metall", "Grus fin", "Grus grov", "Sten" };

    // Material numbers
    final static String[] materialNo = new String[] { "123", "234", "345",
            "456", "567", "789", "012" };

    private void getDataInList() {

        for (int i = 0; i < 7; i++) {
            Materials mats = new Materials(result, result);
            mats.setMaterialName(material[i]);
            // mats.setMaterialNo(material[i]);
            materialList.add(mats);

        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.information_activity);
        name = (TextView) findViewById(R.id.name);
        reg = (TextView) findViewById(R.id.reg);
        product = (TextView) findViewById(R.id.product);
        productNo = (TextView) findViewById(R.id.productNo);
        accept = (Button) findViewById(R.id.btnAccept);
        edit = (Button) findViewById(R.id.btnEdit);
        list = (ListView) findViewById(R.id.list);

        Bundle extras = getIntent().getExtras();
        String selected_item = extras.getString("updateReg");
        reg = (TextView) findViewById(R.id.reg);
        reg.setText(selected_item);

        Bundle extras1 = getIntent().getExtras();
        String selected_item1 = extras1.getString("updateName");
        name = (TextView) findViewById(R.id.name);
        name.setText(selected_item1);

        getDataInList();

        edit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                final AlertDialog.Builder popup = new AlertDialog.Builder(
                        InformationActivity.this);
                popup.setTitle("Välj ny artikel");

                // Search field
                final EditText search = new EditText(context);
                popup.setView(search);
                search.setHint("Sök här...");

                popup.setSingleChoiceItems(material, -1,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {

                                materialList.get(which);
                                Toast.makeText(getApplicationContext(),
                                        material[which], Toast.LENGTH_SHORT)
                                        .show();

                                result = material[which];

                            }

                        });

                // PositiveButton, updates the material info field.
                popup.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                product.setText(result);

                            }
                        });

                // NegativeButton, closes the pop-up.
                popup.setNegativeButton("Avbryt",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                dialog.dismiss();
                            }
                        });

                dialog = popup.create();
                dialog.show();

            }

        });``

        //Remove item
        accept.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                finish();

            }

        });
    }

2 个答案:

答案 0 :(得分:0)

您不应该直接从视图中删除该项目,而是从其中显示的数据中删除。

例如,如果您的ListView正在显示ArrayList中的项目,只需从Activity B 中移除ArrayList中的项目,然后调用{{ 1}}返回包含适配器的Activity A

如果只能访问适配器(假设适配器扩展myAdapter.notifyDataSetChanged()),则可以通过访问ArrayList或覆盖remove()方法来删除项目。

此外,您可能必须覆盖有用的适配器方法,例如ArrayAdaptergetCount() ......

答案 1 :(得分:0)

感谢所有人。 由于remove row from another activity

,我找到了另一个解决方案

A类

   public class ListActivity extends Activity {
        ListView list;
        Button exit;

        static List<ListItems> items = new ArrayList<ListItems>();
        public static int deletePos;
        static ListAdapter adapter;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list);
            list = (ListView) findViewById(R.id.list);
            exit = (Button) findViewById(R.id.btnExit);

            // Registration numbers
            final String[] title = new String[] { "XMT 123", "KLE 456", "CKL 789",
                    "MRP 012", "DSV 345" };

            // Name of the truck drivers
            final String[] subtitle = new String[] { "Peter Lund", "Hans Larsson",
                    "Erik Petersson", "Bjørn Lundal", "Lars Svensson" };

            items = new ArrayList<ListItems>();
            for (int i = 0; i < title.length; i++) {
                ListItems s = new ListItems(title[i], subtitle[i]);
                items.add(s);

            }

            adapter = new ListAdapter(this, android.R.layout.simple_list_item_2,
                    items);
            list.setAdapter(adapter);

            list.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int position, long arg3) {
                    Intent intent = new Intent(ListActivity.this,
                            InformationActivity.class);

                    intent.putExtra("updateReg", title[position].toString());
                    intent.putExtra("updateName", subtitle[position].toString());
                    deletePos = position;
                    adapter.notifyDataSetChanged();

                    startActivity(intent);

                }

            });
            exit.setOnClickListener(new OnClickListener() {

                // Closes the application
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_HOME);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);

                }
            });

        }

    }


Class B

public class InformationActivity extends Activity {
    TextView name;
    TextView reg;
    TextView product;
    TextView productNo;
    Button accept;
    Button edit;
    Button exit;
    AlertDialog dialog;
    ListView list;
    String result;
    EditText search;


    Context context = InformationActivity.this;
    ArrayList<Materials> materialList = new ArrayList<Materials>();

    // Materials
    final static String[] material = new String[] { "Betong", "Grus", "Järn",
            "Metall", "Grus fin", "Grus grov", "Sten" };

    // Material numbers
    final static String[] materialNo = new String[] { "123", "234", "345",
            "456", "567", "789", "012" };

    private void getDataInList() {

        for (int i = 0; i < 7; i++) {
            Materials mats = new Materials(result, result);
            mats.setMaterialName(material[i]);
            // mats.setMaterialNo(material[i]);
            materialList.add(mats);

        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.information_activity);
        name = (TextView) findViewById(R.id.name);
        reg = (TextView) findViewById(R.id.reg);
        product = (TextView) findViewById(R.id.product);
        productNo = (TextView) findViewById(R.id.productNo);
        accept = (Button) findViewById(R.id.btnAccept);
        edit = (Button) findViewById(R.id.btnEdit);
        list = (ListView) findViewById(R.id.list);

        Bundle extras = getIntent().getExtras();
        String selected_item = extras.getString("updateReg");
        reg = (TextView) findViewById(R.id.reg);
        reg.setText(selected_item);

        Bundle extras1 = getIntent().getExtras();
        String selected_item1 = extras1.getString("updateName");
        name = (TextView) findViewById(R.id.name);
        name.setText(selected_item1);
        getDataInList();

        edit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                final AlertDialog.Builder popup = new AlertDialog.Builder(
                        InformationActivity.this);
                popup.setTitle("Välj ny artikel");

                // Search field
                final EditText search = new EditText(context);
                popup.setView(search);
                search.setHint("Sök här...");

                popup.setSingleChoiceItems(material, -1,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {

                                materialList.get(which);
                                Toast.makeText(getApplicationContext(),
                                        material[which], Toast.LENGTH_SHORT)
                                        .show();

                                result = material[which];

                            }

                        });

                // PositiveButton, updates the material info field.
                popup.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                product.setText(result);

                            }
                        });

                // NegativeButton, closes the pop-up.
                popup.setNegativeButton("Avbryt",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                dialog.dismiss();
                            }
                        });

                dialog = popup.create();
                dialog.show();

            }

        });

        // Remove item
        accept.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                int deletePos = ListActivity.deletePos;
                ListActivity.items.remove(deletePos);
                ListActivity.adapter.notifyDataSetChanged();

                finish();

            }

        });

    }

}