使用putExtra()将值传递给Activities

时间:2013-12-09 11:34:28

标签: android android-intent

我正在尝试使用Intents将ListView上的值传递给我的第二个活动。我不确定如何将文本值传递给我Intent导致的第二个活动。现在我的Intent能够连接到第二个活动,但它不会传递tapped值的字符串。

我觉得我需要将一些东西传递给我的launchEditItem(),但我不确定是什么。这些是我现在要处理的两个功能。

private void launchEditItem() {
    Intent i = new Intent(this, EditItemActivity.class);
    i.putExtra("itemOnList", );     // list item into edit text
    startActivity(i);
}

private void setupEditItemListener() {          // on click, run this function to display edit page
    lvItems.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> adapter, View item, int pos, long id) {
            launchEditItem();
        }
    });
}

我不确定放入i.putExtra()的值是多少,但我认为我需要将一个参数传递给launchEditItem()

这是我目前的第二个活动:

public class EditItemActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_item);
        Intent i = getIntent();
        String ItemToEdit = i.getStringExtra("itemOnList");
        // place into EditText using ItemToEdit
    }

我也不确定如何将此String值(ItemToEdit)放入EditText框中。我是Android开发人员的新手所以我正在学习,我可以感谢你!

*编辑*

我想在我的问题中我有点太模糊了。这是我正在处理的小应用程序的完整代码

public class ToDoActivity extends Activity {
    private ArrayList<String> todoItems;        
    private ArrayAdapter<String> todoAdapter;       // declare array adapter which will translate the piece of data to teh view
    private ListView lvItems;                   // attach to list view
    private EditText etNewItem;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_to_do);
        etNewItem = (EditText) findViewById(R.id.etNewItem);
        lvItems = (ListView) findViewById(R.id.lvItems);        // now we have access to ListView
        //populateArrayItems();                 // call function
        readItems();        // read items from file
        todoAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, todoItems);   //create adapter
        lvItems.setAdapter(todoAdapter);        // populate listview using the adapter 
        //todoAdapter.add("item 4");
        setupListViewListener();
        setupEditItemListener();

    }

    private void launchEditItem() {
        Intent i = new Intent(this, EditItemActivity.class);
        i.putExtra("itemOnList", );     // list item into edit text
        startActivity(i);
    }

    private void setupEditItemListener() {          // on click, run this function to display edit page
        lvItems.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> adapter, View item, int pos, long id) {
                launchEditItem();
            }

        });
    }

    private void setupListViewListener() {
        lvItems.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapter, View item, int pos, long id) {
                todoItems.remove(pos);
                todoAdapter.notifyDataSetChanged(); // has adapter look back at the array list and refresh it's data and repopulate the view
                writeItems();   
                return true;
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.to_do, menu);
        return true;
    }

    public void onAddedItem(View v) {
        String itemText = etNewItem.getText().toString();
        todoAdapter.add(itemText);  // add to adapter
        etNewItem.setText("");      //clear edit text
        writeItems();       //each time to add item, you want to write to file to memorize
    }

    private void readItems() {
        File filesDir = getFilesDir();  //return path where files can be created for android
        File todoFile = new File(filesDir, "todo.txt");
        try {
            todoItems = new ArrayList<String>(FileUtils.readLines(todoFile));   //populate with read
        }catch (IOException e) {    // if files doesn't exist  
            todoItems = new ArrayList<String>();
        }
    }

    private void writeItems() {
        File filesDir = getFilesDir();  //return path where files can be created for android
        File todoFile = new File(filesDir, "todo.txt");
        try {
            FileUtils.writeLines(todoFile, todoItems);  // pass todoItems to todoFile
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5 个答案:

答案 0 :(得分:5)

    String[] link_list;
   int currenttrack=0;

        link_list=new String[]{
            "W-TE_Ys4iwM",//1
            "oozgmH3ZP14",//2
            "o_v9MY_FMcw",//3
            "36mCEZzzQ3o",//4

}

第一项活动

list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            currenttrack=arg2;


            Intent videoIntent=new Intent(MainActivity.this,VideoView.class);
            videoIntent.putExtra("filename", link_list[currenttrack]);
            startActivity(videoIntent);
        }
    });

在你的第二个活动中

    // getting intent data

    // get intent data
    Intent i = getIntent();
    Bundle extras = i.getExtras();
    filename = extras.getString("filename");
    Log.e("File Name", filename);

和你的完成:))

答案 1 :(得分:2)

在您当前的活动中,创建一个新的意图:

Intent i = new Intent(getApplicationContext(), NewActivity.class);
i.putExtra("new_variable_name","value");
startActivity(i);

然后在新的Activity中,检索这些值:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("new_variable_name");
}

答案 2 :(得分:2)

我不确定我是否理解价值在哪里。好吧,如果值在EditText中,请执行以下操作:

private void launchEditItem(String text) {
    Intent i = new Intent(this, EditItemActivity.class);
    i.putExtra("itemOnList", text);     // list item into edit text
    startActivity(i);
}

private void setupEditItemListener() {          // on click, run this function to display edit page
    lvItems.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> adapter, View item, int pos, long id) {
            EditText editView = (EditText) item.findById(R.id.ItemToEdit);
            String text = editView != null ? editView.getText().toString() : "";
            launchEditItem(text);
        }
    });
}

答案 3 :(得分:1)

1 - 我有一些疑问:

i.putExtra("itemOnList", );

你最好传递一个值:

i.putExtra("itemOnList", "something");

2 - 要对控件进行增值,您必须首先获得对它的引用。类似的东西:

EditText edt =
    (EditText) findViewById(R.id.activity_edit_item_my_EditText); // or whatever id you assigned to it  (it MUST HAVE AN ID)

在setContentView()之后执行。

然后你可以设置它的文字如下:

edt.setText(ItemToEdit); // Now it should contain "something"

就像那个一样简单

<强> [编辑]

如果你不确定要传递什么,那么将ListView中的“tapped”值传递到putExtra,修改listview点击处理程序代码:

list.setOnItemClickListener
(
    new OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
        {
            // TODO Auto-generated method stub
            Intent videoIntent = new Intent(MainActivity.this, VideoView.class);
            videoIntent.putExtra("filename", (((TextView) v).getText().toString());
            startActivity(videoIntent);
        }
    }
);

它应该立即起作用。

答案 4 :(得分:0)

01:当前活动

C:\Users\MOM>npm install -g firebase-tools
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
C:\Users\MOM\AppData\Roaming\npm\firebase -> C:\Users\MOM\AppData\Roaming\npm\node_modules\firebase-tools\lib\bin\firebase.js
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules\firebase-tools\node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ firebase-tools@8.7.0
updated 1 package in 103.544s

02:新活动

String pass_value ="value";

Intent intent = new Intent(getApplicationContext(),NewActivity.class);
intent.putExtra("var_name",pass_value);
startActivity(intent);