我一直在关注这个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。我真的不明白这两项活动之间发生了什么。在理解实际发生的事情之前,我无法继续。任何帮助都会非常棒!!感谢。
答案 0 :(得分:3)
线条是什么......实际上是什么意思?
这意味着如果用于启动Intent
的{{1}}具有FilePicker
,请保留该值,我认为该活动的EXTRA_SHOW_HIDDEN_FILES
字段是未在您的编辑代码清单中显示。
但是,你可以。你不必。我们没有传递任何额外内容,例如之前活动的“EXTRA_SHOW_HIDDEN_FILES”
甚至EXTRA_SHOW_HIDDEN_FILES已在此课程中声明
这是相当典型的。 boolean
声明了一个API,因此它公开了用于传入和传出额外的名称。 FilePicker
为EXTRA_SHOW_HIDDEN_FILES
,因此可以从任何地方引用它,包括public
。