getIntent.hasExtra方法如何在android

时间:2016-05-08 13:54:02

标签: android android-intent

我一直在关注这个link的教程,它基本上是关于android中的文件浏览概念。一切正常但我很困惑,阅读此链接后,如何在android之间传递意图。第一项活动如下,

public class MainActivity extends Activity implements OnClickListener {

private static final int REQUEST_PICK_FILE = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    filePath = (TextView)findViewById(R.id.file_path);
    Browse = (Button)findViewById(R.id.browse);
    Browse.setOnClickListener(this);      
}

public void onClick(View v) {

    switch(v.getId()) {

    case R.id.browse:
        Intent intent = new Intent(this, FilePicker.class);            
        startActivityForResult(intent, REQUEST_PICK_FILE);
        break;
    }
}

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

    if(resultCode == RESULT_OK) {

        switch(requestCode) {

        case REQUEST_PICK_FILE:

            if(data.hasExtra(FilePicker.EXTRA_FILE_PATH)) {

                selectedFile = new File
                        (data.getStringExtra(FilePicker.EXTRA_FILE_PATH));
                filePath.setText(selectedFile.getPath());  
            }
            break;
        }
    }

据我所知,它传递意图“REQUEST_PICK_FILE”并根据它从“FilePicker.Class”返回的内容,它将执行该操作,因为它的StartActivityOnResult。混乱从下一个活动开始。这是File Picker类,

  public class FilePicker extends ListActivity {

public final static String EXTRA_FILE_PATH = "file_path";
public final static String EXTRA_SHOW_HIDDEN_FILES = "show_hidden_files";
public final static String EXTRA_ACCEPTED_FILE_EXTENSIONS = "accepted_file_extensions";
private final static String DEFAULT_INITIAL_DIRECTORY = "/";
.......
protected String[] acceptedFileExtensions;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    .........
    // Initialize the extensions array to allow any file extensions
    acceptedFileExtensions = new String[] {};

    // Get intent extras
    if(getIntent().hasExtra(EXTRA_FILE_PATH)) 
        Directory = new File(getIntent().getStringExtra(EXTRA_FILE_PATH));

    if(getIntent().hasExtra(EXTRA_SHOW_HIDDEN_FILES)) 
        ShowHiddenFiles = getIntent().getBooleanExtra(EXTRA_SHOW_HIDDEN_FILES, false);

    if(getIntent().hasExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS)) {

        ArrayList<String> collection = 
                getIntent().getStringArrayListExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS);

        acceptedFileExtensions = (String[]) 
                collection.toArray(new String[collection.size()]);
    }
}
 ..............

这里到底发生了什么?线条是什么,

   if(getIntent().hasExtra(EXTRA_SHOW_HIDDEN_FILES)) 
        ShowHiddenFiles = getIntent().getBooleanExtra(EXTRA_SHOW_HIDDEN_FILES, false); 

实际上是什么意思?我们没有传递任何额外内容,例如前一个活动中的“EXTRA_SHOW_HIDDEN_FILES”,甚至在此类中声明了EXTRA_SHOW_HIDDEN_FILES。我真的不明白这两项活动之间发生了什么。在理解实际发生的事情之前,我无法继续。任何帮助都会非常棒!!感谢。

1 个答案:

答案 0 :(得分:3)

  

线条是什么......实际上是什么意思?

这意味着如果用于启动Intent的{​​{1}}具有FilePicker,请保留该值,我认为该活动的EXTRA_SHOW_HIDDEN_FILES字段是未在您的编辑代码清单中显示。

  

我们没有传递任何额外内容,例如之前活动的“EXTRA_SHOW_HIDDEN_FILES”

但是,你可以。你不必。

  

甚至EXTRA_SHOW_HIDDEN_FILES已在此课程中声明

这是相当典型的。 boolean声明了一个API,因此它公开了用于传入和传出额外的名称。 FilePickerEXTRA_SHOW_HIDDEN_FILES,因此可以从任何地方引用它,包括public