簡體   English   中英

從另一個活動中單擊按鈕后,從活動中刪除列表視圖項

[英]Delete a listview item from activity on button click from another activity

我有一個MainActivity ,它顯示一個listview其中包含我動態添加到其中的項目。 到目前為止,一切正常。 現在想創建一個button ,該button應該刪除被單擊的listview item 這是我附帶的代碼。

主要活動

package news;

import android.app.Activity;
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ArrayAdapter<String> newslist_adapter;
    ArrayList<String> new_subject = new ArrayList<>();
    ArrayList<String> new_post = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ListView post_view = findViewById(R.id.news_feed);

        FloatingActionButton add_post_button = findViewById(R.id.post_btn);

        //create click event and pass values of arrays
        post_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                Intent intent = new Intent(getApplicationContext(), full_post_activity.class);
                intent.putExtra("Subject", new_subject);
                intent.putExtra("Post", new_post);
                intent.putExtra("position", id);
//                getApplicationContext().startActivity(intent);
                startActivityForResult(intent, 2);
            }
        });

        //create button connection and create keylistener
        add_post_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, addpost_activity.class);
                startActivityForResult(intent, 1);

            }
        });

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        final ListView post_view = findViewById(R.id.news_feed);
        if (requestCode == 1) {
            if(resultCode == Activity.RESULT_OK){
                //get subject and post from second activity
                String new_subject_value = data.getStringExtra("newSubject");
                String new_post_value = data.getStringExtra("newPost");
                new_subject.add(new_subject_value);
                new_post.add(new_post_value);
                newslist_adapter = new ArrayAdapter<>(
                        MainActivity.this,
                        android.R.layout.simple_expandable_list_item_1, new_subject);
                post_view.setAdapter(newslist_adapter);

            }
        }
        if (requestCode == 2) {
            if(resultCode == Activity.RESULT_OK){
                String item2delete = data.getStringExtra("id");
                new_subject.remove(item2delete);
                newslist_adapter = new ArrayAdapter<>(
                        MainActivity.this,
                        android.R.layout.simple_expandable_list_item_1, new_subject);
                post_view.setAdapter(newslist_adapter);
            }
        }
    }
} 

SecondActivity

package news;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;

public class full_post_activity extends AppCompatActivity {

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

        final int id = getIntent().getExtras().getInt("id");

        //create view reference
        final TextView subject_edit = findViewById(R.id.subject_input);
        final TextView post_edit = findViewById(R.id.post_input);

        //create button reference
        Button delete_button = findViewById(R.id.full_post_delete_btn);

        //create click event
        delete_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                intent.putExtra("id", id);
                setResult(Activity.RESULT_OK, intent);
                finish();
            }
        });

        ArrayList<String> subject_array = (ArrayList<String>) getIntent().getSerializableExtra("Subject");
        ArrayList<String> post_array = (ArrayList<String>) getIntent().getSerializableExtra("Post");

        String subject_string = subject_array.get(0);
        String post_string = post_array.get(0);

        //set textview text
        subject_edit.setText(subject_string);
        post_edit.setText(post_string);
    }
}

我現在的問題是, delete button除了返回MainActivity之外什么也不做。 我究竟做錯了什么?

您無法將ID值獲取給MainActivity。 第二行中的此行導致問題

final int id = getIntent().getExtras().getInt("id");

在主要活動中,您可以使用名稱索引“ position”放置id值

intent.putExtra("position", id);

所以你應該將它們更改為

第二活動中

final int id = getIntent().getExtras().getInt("position");

主要活動

intent.putExtra("id", id);

更新在主要活動中嘗試此

intent.putExtra("id", position);

如果您想停留在刪除按鈕所在的活動中,建議您為ListView后面的列表創建一個吸氣劑和一個吸氣劑(用ALT + INSERT輕松生成)。

然后,您可以在delete_buttons OnClick方法內創建MainActivity的實例,並使用getter獲取所說的List。 再次使用MainActivity實例,刪除您需要刪除的Item並使用setter更新列表。

編輯:這是一些代碼示例

Getter和Setter:

public ArrayList<String> getNewPost() {
    return this.new_post;
}

public void setNewPost(ArrayList<String> np) {
    this.new_post = np;
}

delete_button OnClick方法:

delete_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MainActivity main=new MainActivity();
            ListView<String> np=main.getNewPost();
            np.remove("StringToRemove"); 
            main.setNewPost(np);
        }
    });

我還建議您創建一個back_button來檢查列表是否已更新,您可以為此使用舊的delete_button onclick。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM