【问题标题】:How to get data from text file onListItemClick in android?如何从android中的文本文件onListItemClick获取数据?
【发布时间】:2013-12-01 23:00:57
【问题描述】:

我目前正在开发一款为我的世界制作模组的应用。我的应用程序有一个简单的文件管理器,当用户选择文件时,我想在其中获取文件数据并将其放入 EditText 的另一个活动中。我不知道如何获取数据并将其发送到另一个活动中的 EditText。

编辑: 这是我的 OpenScript.class,我试图将数据推送到另一个活动的 EditText 中的文件中,但我不知道该怎么做。

public class OpenScript extends ListActivity {
    private List<String> items =null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.scripts_list);

        getFiles(new File("/sdcard/ChatoGuy1/ModPE Scripter/Scripts").listFiles());
    }
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        try{
             Intent i = new Intent(this, ScriptWriter.class);
        i.putExtra("code", /* ? */);
        startActivityForResult(i, 1);
        }
        catch(Exception e){

        }
    }

    private void getFiles(File[] files) {
        items = new ArrayList<String>();
        for (File file : files) {
            items.add(file.getPath());
        }
        ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.file_list_row, items);
        setListAdapter(fileList);
    }
}

第二个活动:

public class ScriptWriter extends Activity{
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.code_editor);

        final EditText editText = (EditText) findViewById(R.id.codeEditor);
        final Button codeSave = (Button) findViewById(R.id.bCodeSave);
        //get file
         Intent intent = getIntent();
        String test = intent.getExtras().getString("code");
        //read file
        StringBuilder text = new StringBuilder();
        try {
            BufferedReader br = new BufferedReader(new FileReader(test));
            String line;

            while ((line = br.readLine()) != null) {
                text.append(line);
                text.append('\n');
            }
        }
        catch (IOException e) {
            Toast.makeText(this, "File does not exist.", Toast.LENGTH_LONG).show();
        }
        editText.setText(text);
    }
}

【问题讨论】:

  • 你能粘贴一些代码吗?到目前为止,您尝试过什么?
  • 我现在粘贴了我的代码。

标签: android text file-management


【解决方案1】:

如何在android中从文本文件onListItemClick中获取数据?

@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        try{
           TextView tv = v.findViewById(<id_of_infliated_textView_in_your_adapter_class>)
           String path - tv.getText().toString();
           Intent i = new Intent(this, ScriptWriter.class);
           i.putExtra("code", path );
           startActivityForResult(i, 1);
        }
        catch(Exception e){

        }
    }

上述代码在您使用自定义适配器时有效(创建您自己的适配器类和关联布局文件)。

你的情况很简单。

我该怎么做呢?我似乎无法理解如何 将 URI 发送到我的第二个活动。我知道如何从 给定路径,但不是当用户选择文件时

获取文件路径

因为您已经在全局范围内声明了 Array 列表,并在代码中使用了此方法。

private void getFiles(File[] files) {
        items = new ArrayList<String>();
        for (File file : files) {
            items.add(file.getPath());
        }
        ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.file_list_row, items);
        setListAdapter(fileList);
    }

再做一个方法说“getFileAtPosition”

private String getFileAtPosition(int position){

return items.get(position);

}

并在您的 onListItemClick 方法中调用上述函数

@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        try{
             Intent i = new Intent(this, ScriptWriter.class);
        i.putExtra("code",getFileAtPosition(position));
        startActivityForResult(i, 1);
        }
        catch(Exception e){

        }
    }

【讨论】:

    【解决方案2】:

    当用户在 Activity A 上选择一个文件时,您想打开一个文件并读取它的内容并将内容发送到 Activity B,它将显示在 EditText 小部件中。对吧?

    无需在意图中将文件内容发送到活动 B。只需将文件 URI 作为意图的一部分发送到活动 B,然后在那里执行文件读取操作并填充您的 EditText。这样干净多了。

    HTH。

    【讨论】:

    • 我该怎么做呢?我似乎无法理解如何将 URI 发送到我的第二个活动。我知道如何从给定路径读取文件,但在用户选择文件时不知道。
    • 我可以发送一个字符串吗?例如: Intent i = new Intent(this, ScriptWriter.class); i.putExtra("代码", /* ? */); startActivityForResult(i, 1);
    • 是的。将文件 URI 作为字符串发送。根据您的需要使用 startActivity 或 startActivityForResult。
    • 那我只发文件的位置吗?
    • 我也添加了第二个代码,因为当我点击文件时,应用程序只是强制关闭,但我不知道出了什么问题。
    猜你喜欢
    • 2011-10-06
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2018-12-04
    • 1970-01-01
    • 2015-12-30
    • 2014-09-19
    相关资源
    最近更新 更多