[英]How to start New Layout (activity) from ListView
When I click the ListView
, I'd like to start a new Activity
当我单击ListView
,我想开始一个新的Activity
Here is my MainActivity.java
这是我的MainActivity.java
package com.theheran.listviewicon;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
//Declarasi Array Menu dan gambar
ListView list;
String[] menu = {
"@The_Heran",
"www.theheran.com",
"Add",
"Delete",
"Next",
"Back",
"Find",
"Warning"
} ;
Integer[] imageId = {
R.drawable.ic_launcher,
R.drawable.signal,
R.drawable.add,
R.drawable.trash,
R.drawable.next,
R.drawable.back,
R.drawable.find,
R.drawable.warning
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CustomListView adapter = new
CustomListView(MainActivity.this, menu, imageId);
list=(ListView)findViewById(R.id.list);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Toast.makeText(MainActivity.this, "You Clicked at " +menu[+ position], Toast.LENGTH_SHORT).show();
// HERE THE PROBLEM (Intent)
Intent intent = new CustomListView(MainActivity.this,);
startActivity(intent);
}
});
}
}
My CustomListView
我的CustomListView
package com.theheran.listviewicon;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomListView extends ArrayAdapter<String> {
//Declarasi
private final Activity context;
private final String[] web;
private final Integer[] imageId;
public CustomListView(Activity context,String[] web, Integer[] imageId) {
super(context, R.layout.list_single_data, web);
this.context = context;
this.web = web;
this.imageId = imageId;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
//Load Custom Layout untuk list
View rowView= inflater.inflate(R.layout.list_single_data, null, true);
//Declarasi komponen
TextView txtTitle = (TextView) rowView.findViewById(R.id.txtList);
ImageView imageView = (ImageView) rowView.findViewById(R.id.imgIcon);
//Set Parameter Value
txtTitle.setText(web[position]);
imageView.setImageResource(imageId[position]);
return rowView;
}
}
// HERE THE PROBLEM (Intent) //这里是问题(意图)
Intent intent = new CustomListView(MainActivity.this,); Intent intent =新的CustomListView(MainActivity.this,); startActivity(intent); startActivity(intent);
Here you are trying to use a wrong structure. 在这里,您尝试使用错误的结构。 Use this: 用这个:
Intent intent = new Intent(MainActivity.this, NextActivity.class);
MainActivity.this.startActivity(intent );
Try this way , 试试这个
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this, "You Clicked at " +position , Toast.LENGTH_SHORT).show();
Intent MoveToNext = new Intent(getApplicationContext(), Your_Next_Activity.class);
startActivity(MoveToNext);
}
});
This is how I have done it. 这就是我所做的。 You start a new activity using the startActivityForResult(intent, 2);
您可以使用startActivityForResult(intent, 2);
开始新的活动startActivityForResult(intent, 2);
Where you throw a intent and a number (number that you check for when you go back to the starting page). 在何处输入意图和数字(返回起始页时检查的数字)。
private void registerButtonClickList() {
ListView list = (ListView) findViewById(R.id.listView);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(InThisClass.this, GoingToThisClass.class);
intent.putExtra("Position", position);
startActivityForResult(intent, 0);
}
});
}
Use this where in the same class as you started the other one form the list. 在与您启动另一个班级的列表相同的班级中使用此名称。 This is needed since you are expecting a return when you start with startActivityForResult()
这是必需的,因为从startActivityForResult()
开始时期望返回
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
if (resultCode == Activity.RESULT_OK) {
//See what u should do using the requestCode
//and check if it ended OK
}
if (resultCode == Activity.RESULT_CANCELED) {
//what you do when canceled
}
}
}
And in the activity that you started you need to end with this because you are expected to return something. 在开始的活动中,您需要以此结束,因为您应该返回一些东西。 This you do by using setResult()
. 您可以使用setResult()
完成此操作。
Button btn = (Button) findViewById(R.id.btn);
btnCANCEL.setOnClickListener(new View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.CUPCAKE)
@Override
public void onClick(View v) {
Intent intent = new Intent();
setResult(Activity.RESULT_OK, intent);
//intent.putExtra("something", something); if you need to send something back
finish();
}
});
Hope this helps! 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.