Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用“后退”按钮时,将显示“活动”中的旧屏幕_Android_Android Listview_Android Activity_Android Ui - Fatal编程技术网

Android 使用“后退”按钮时,将显示“活动”中的旧屏幕

Android 使用“后退”按钮时,将显示“活动”中的旧屏幕,android,android-listview,android-activity,android-ui,Android,Android Listview,Android Activity,Android Ui,我想我不明白像“后退按钮”这样的东西是如何影响活动的行为的 以下是我的主要活动屏幕截图: 如果用户单击右上角的书签图标,my BookmarksActivity显示如下: 在这里,用户单击Add按钮添加书签,我在my BookmarksActivity类中调用finish(),屏幕返回my Main活动 现在假设用户想要删除书签,他们将再次单击书签图标,该图标向用户显示以下屏幕: 现在,用户可以单击删除按钮,出现以下屏幕: 现在,用户希望通过按下后退按钮返回MainActivity的屏

我想我不明白像“后退按钮”这样的东西是如何影响活动的行为的

以下是我的主要活动屏幕截图:

如果用户单击右上角的书签图标,my BookmarksActivity显示如下:

在这里,用户单击Add按钮添加书签,我在my BookmarksActivity类中调用
finish()
,屏幕返回my Main活动

现在假设用户想要删除书签,他们将再次单击书签图标,该图标向用户显示以下屏幕:

现在,用户可以单击删除按钮,出现以下屏幕:

现在,用户希望通过按下后退按钮返回MainActivity的屏幕,这样做会像预期的那样删除键盘,从而产生此屏幕:

但是现在用户仍然希望返回主屏幕,所以他们再次单击“返回”按钮,但是用户希望看到的不是主屏幕,而是这个屏幕

现在,我的SQLite数据库中没有书签,但有一个正在显示。如果用户再次单击“后退”按钮,他们最终会看到主活动屏幕

。。。如果他们单击Bookamrk图标,您可以看到没有书签:

谢谢你对我的耐心和对这个问题的冗长描述。以下是我认为相关的代码片段:

以下是删除发生的位置:

public class BookMarksBaseAdapter extends BaseAdapter  {

    ...

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.bookmark, null);

    TextView    tv_bookmark_name    = (TextView)vi.findViewById(R.id.bookmark_name); 
    TextView    tv_bookmark_clock   = (TextView)vi.findViewById(R.id.bookmark_clock);
    Button      deleteButton    = (Button)vi.findViewById(R.id.btn_delete_bookmark);

    final bookMark bookmark = new bookMark(data.get(position).get_bookmark_name(), data.get(position).get_bookmark_track(), data.get(position).get_bookmark_clock(), 0);
    final String    bookmark_name = bookmark.get_bookmark_name();
    final int       ibookmark_clock = bookmark.get_bookmark_clock();

    // Setting all values in listview
    tv_bookmark_name.setText(bookmark_name);
    tv_bookmark_clock.setText(utils.milliSecondsToTimer(ibookmark_clock));
    deleteButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d( TAG, "delete button clicked line 73" ); 
            db.deleteBookmark(bookmark);
            v.getContext().startActivity(new Intent(v.getContext(), com.redcricket.myApp.BookMarksActivity.class));
        }
    });
    return vi;
}
下面是my BookmarkActivity
onCreate
方法中的一个片段:

@Override
public void onCreate(Bundle savedInstanceState) {
    currentChapterTitle     = com.redcricket.myApp.MainActivity.getTrackTitle(0);
    currentTrack            = com.redcricket.myApp.MainActivity.getCurrentSongIndex();
    currentTrackPosition    = "00:00:00";

    db = new Databasehandler(this);
    db.getWritableDatabase();

    utils = new Utils();

    try {
        currentChapterTitle = com.redcricket.myApp.MainActivity.getCurrentTrackTitle();
    } catch (Exception e) {
        Log.d( TAG, "expection line 27" );
        e.printStackTrace();
    }

    try {
        icurrentTrackPosition = com.redcricket.myApp.MainActivity.getCurrentTrackPosition();
        currentTrackPosition = utils.milliSecondsToTimer(icurrentTrackPosition); 
    } catch (Exception e) {
        Log.d( TAG, "expection line 34" );
        e.printStackTrace();
    }

    super.onCreate(savedInstanceState);

    setContentView(R.layout.bookmarks);

    try {
        new_bookmark_name = (EditText) findViewById(R.id.new_bookmark_name);
    } catch (Exception e) {
        Log.d( TAG, "expection line 43" );
        e.printStackTrace();
    }

    try {
        new_bookmark_name.setText( currentChapterTitle );
    } catch (Exception e) {
        Log.d( TAG, "expection line 49" );
        e.printStackTrace();
    }

    try {
        new_bookmark_clock = (TextView) findViewById(R.id.new_bookmark_clock);
    } catch (Exception e) {
        Log.d( TAG, "expection line 55" );
        e.printStackTrace();
    }

    try {
        new_bookmark_clock.setText( currentTrackPosition );
    } catch (Exception e) {
        Log.d( TAG, "expection line 61" );
        e.printStackTrace();
    }

    try {
        addButton = (Button) findViewById(R.id.btn_add_new_bookmark);
    } catch (Exception e) {
        Log.d( TAG, "expection line 43" );
        e.printStackTrace();
    }
    addButton.setOnClickListener(this);     
    bookMarkList = db.getAllBookmarks();
    // add list
    bookmark_list=(ListView)findViewById(R.id.bookmarks_list);
    adapter=new BookMarksBaseAdapter(this, bookMarkList, this); 
            bookmark_list.setAdapter(adapter);
我一定是在什么地方做错了什么。我试图覆盖
onBackButton
方法,并让它调用finish,但根本没有帮助。我最好的猜测是这句话错了:

            v.getContext().startActivity(new Intent(v.getContext(), com.redcricket.myApp.BookMarksActivity.class));
当按下删除按钮时,我称之为删除


欢迎任何帮助。谢谢

我假设Main是一个活动,book mark是另一个活动,book mark delete是另一个活动。除非您告诉某个活动没有历史记录或在转到另一个活动之前明确完成它,否则它将保留在活动堆栈中

在您的示例中,用户转到MainActivity->BookMarkActivty,然后通过按下从堆栈中删除bookmarkactive的按钮返回MainActivity。一切都好

在另一个示例中,用户转到MainActivity->BookMarkActivity->DeleteActivity

这里的问题是,当他们单击“删除”时,您是完成删除活动还是开始新的书签活动

看起来您正在启动一个新的BookMark活动,完成了旧的BookMark活动,并在删除过程后得到了一堆Main-DeleteBookMark-BookMark


当他们选择执行删除并将删除活动设置为无历史记录或在删除后显式完成时,不要完成书签。

Doh!我知道我需要做什么。我需要将传递给我的
BookMarksBaseAdapter
类的构造函数的
活动
保存为私有成员,如下所示

公共类BookMarksBaseAdapter扩展BaseAdapter{

private Activity  activity;
...

BookMarksBaseAdapter (Activity a, ArrayList<bookMark> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    utils = new Utils();
    db = new Databasehandler(a);
}

感谢您的回复!没有DeleteActivity(可能应该有一个?)删除发生在这个类中
公共类BookMarksBaseAdapter extensed BaseAdapter
书签列表=(ListView)findViewById(R.id.bookmarks\u列表)中有这个代码;适配器=新书签BaseAdapter(这个,书签列表,这个)bookmark_list.setAdapter(adapter);
在BookmarksActivity的onCreate方法中。
deleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            db.deleteBookmark(bookmark);
            activity.finish();
        }
    });