ListView中的Toast以意想不到的方式运行

时间:2015-07-18 13:08:18

标签: android listview

这是一个简单的代码,用于使用Listview填充目录中的文件。当用户点击列表中的元素时,该名称为Toasted,并且调用finish()来结束Activity。但问题是当用户单击列表中的每个元素时,它会对每个单击元素的名称进行Toast。我想知道finish()方法会发生什么?这是我的源代码。 请在下面评论任何其他信息!

 private List<String> myList;
File file;


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




        ListView listView = (ListView) findViewById(R.id.listX);
        myList = new ArrayList<String>();

        File directory = Environment.getExternalStorageDirectory();
        file = new File( directory + "/myAppCache/" );
        File list[] = file.listFiles();

        for( int i=0; i< list.length; i++)
        {
            myList.add( list[i].getName() );
        }
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, final View view,
                                    int position, long id) {
                final String item = (String) parent.getItemAtPosition(position);
                view.animate().setDuration(2000).alpha(0)
                        .withEndAction(new Runnable() {
                            @Override
                            public void run()
                            {
                                Toast.makeText(getApplicationContext(), "" + item,
                                        Toast.LENGTH_LONG).show();
                                finish();


                            }
                        });
            }
        });

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, myList);

        listView.setAdapter(adapter); //Set all the file in the list.
}

2 个答案:

答案 0 :(得分:0)

使用ActivityName.this.finish();

你在一个匿名的内心阶层里面记得。因此,您需要引用要明确完成的活动。

finish();完成Runnable对象。不是活动。

因此,请使用<ActivityName>.this.finish();

答案 1 :(得分:0)

可能是因为在finish()内调用Runnable,请尝试这样做:

YourActivity.this.finish();