如何从自定义ListView启动活动?

时间:2015-08-09 12:42:00

标签: android listview android-listview

我有一个自定义列表视图,我可以在其中添加任意数量的元素。所有这些元素都必须打开一个活动(在我的项目中称为"编译"),并填充一些edittext内容。问题是,我实际上并不知道在我的代码中写什么来告诉应用程序在单击其中一个元素时打开Compile活动。

//(显然每个元素都必须打开其编译活动及其相关信息。例如:element" Pizza"必须打开活动编译,其中包含我之前关于Pizza的所有信息。) //

感谢您的支持

这是我的listview代码:

public class Sheet extends Activity {

    private static final int DIALOG_ALERT = 10;

    ListView list;
    ImageView addBtn;
    EditText input;

    String[] items;
    MyListAdapter adapter;
    AlertDialog alert;

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

        list = (ListView) findViewById(R.id.list);
        addBtn = (ImageView) findViewById(R.id.addPlanBtn);

        input = new EditText(this);

        items = new String[1];

        alert = new AlertDialog.Builder(Sheet.this).create();
        alert.setTitle("Activity name: ");
        alert.setMessage("Type a name for your activity: ");
        alert.setView(input);


        alert.setButton("add", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {
                String value = input.getText().toString();

                items[items.length - 1] = value;

                adapter = new MyListAdapter(Sheet.this, items);
                list.setAdapter(adapter);

                String[] temp = new String[items.length +1];

                for(int i = 0; i< items.length; i++)
                    temp[i] = items[i];

                items = temp;

                alert.dismiss();
                adapter.notifyDataSetChanged();

            }

        });

        addBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                alert.show();
            }
        });

    }

3 个答案:

答案 0 :(得分:0)

将此添加到listView的OnItemClickListener:

Intent newActivity = new Intent(MainActivity.this, CompileActivity.class); 
//You could pass extra info here using  newActivity.putExtra(). 
// Like   newActivity.putExtra("Pizza", "Pizza name");
startActivity(newActivity);

答案 1 :(得分:0)

list.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        Object selectedItem = parent.getItemAtPosition(position);
        //Do something with your object. If it's a String and you want to send it to CompileActivity, do it like this:
        Intent intent = new Intent(MainActivity.this, CompileActivity.class); 
        intent.putExtra("some-data-id", (String)selectedItem)
        startActivity(intent);
    }
}

在CompileActivity中,您可以像这样使用发送的数据:

String selectItem = getIntent().getStringExtra("some-data-id");

请记住,Intents会跨活动发送您的数据副本。更改此字符串不会更改上一个活动的字符串。这只是一个副本。

意图是Android的基本构建块,因此值得更多地了解它们。这是place to start

答案 2 :(得分:0)

在列表视图中,活动类集&#34; setOnItemClickListener&#34;为您的列表视图。从那里开始一项新的活动。

listview.setOnItemClickListener(new OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent(view.getContext(),yourActivity.class);
    //you can add some extras if you want like this
    intent.putExtra("Key",Value);
    startActivity(intent);

                }

            });

您可以检索被调用活动中的值,如下所示:

int variable = getIntent().getIntExtra("Key", someDefaultIntValue);

请注意,您可以在此处使用您的数据类型替换int。