每个列表项打开不同activity
Each list item to open different activity
代码有一个 ListView
,点击列表项会弹出一个 AlertDialog
。 AlertDialog
有两个单选按钮 "yes" 和 "no",然后是一个 "ok" 按钮。
当用户 select "yes" 启动下一个 Activity
时,如果 selected "no" 他们保持相同 Activity
.
我的问题是:无论我选择哪个列表项,我都会被带到同一个 'Next-activity' 。我希望根据我选择的列表项进行不同的活动。
listview = (ListView) findViewById(R.id.mylistview);
final String[] items = new String[]{"IOS", "ANDROID", "WINDOWS"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_expandable_list_item_1, items);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int itemposition = position;
String itemvalue = (String) listview.getItemAtPosition(position);
final CharSequence[] items1 = {"yes", "no"};
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("slection confirmation");
builder.setCancelable(false);
builder.setSingleChoiceItems(items1, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selection = (String) items1[which];
Toast.makeText(getApplicationContext(), items1[which], Toast.LENGTH_SHORT).show();
}
});
builder.setNeutralButton("OK",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (selection)
{
case("yes"):
Intent myint=new Intent(MainActivity.this,secondpage.class);
myint.putExtra("act1","");
startActivity(myint);
break;
case("no"):
dialog.cancel();
break;
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
}
}
您正在 Intent 中对 second.class
进行硬编码,而是尝试使用一个动态变量,该变量根据您单击的项目[=12= 保存 class 的值]
public static Activity ClASS_NAME;
//set CLASS_NAME based on item position for example
switch (selection)
{
case("yes"):
Intent myint=new Intent(MainActivity.this,CLASS_NAME);
myint.putExtra("act1","");
startActivity(myint);
break;
case("no"):
dialog.cancel();
break;
}
首先,为不同活动的所有 class 名称创建字符串资源。在你的 'res/strings.xml' 文件中,你可以写
<string name="sFirstClass">my.package.name.MyFirstClass</string>
<string name="sSecondClass">my.package.name.MySecondClass</string>
请注意,使用活动的完整路径很重要。
然后,在 OnItemClickListener
的 'onItemClick()' 方法中,定义一个 String 变量并根据单击的列表项的位置对其进行初始化。
// 'final' is important so the String will be visible
// inside the dialog button's 'onClick()' method
final String SECONDPAGE_CLASS = getMyClass(position);
其中'getMyClass()'是匹配位置和目标的方法activity:
private String getMyClass(int pos)
{
String myClass;
switch (pos)
{
case 0: myClass = getString(R.string.sFirstClass);
break;
case 1: myClass = getString(R.string.sSecondClass);
break;
//...
default: // do whatever is appropriate
}
return myClass;
}
现在,对于您的确定按钮,您可以将 Intent
定义为
try
{
Intent myint = new Intent(MainActivity.this, Class.forName(SECONDPAGE_CLASS));
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
代码有一个 ListView
,点击列表项会弹出一个 AlertDialog
。 AlertDialog
有两个单选按钮 "yes" 和 "no",然后是一个 "ok" 按钮。
当用户 select "yes" 启动下一个 Activity
时,如果 selected "no" 他们保持相同 Activity
.
我的问题是:无论我选择哪个列表项,我都会被带到同一个 'Next-activity' 。我希望根据我选择的列表项进行不同的活动。
listview = (ListView) findViewById(R.id.mylistview);
final String[] items = new String[]{"IOS", "ANDROID", "WINDOWS"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_expandable_list_item_1, items);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int itemposition = position;
String itemvalue = (String) listview.getItemAtPosition(position);
final CharSequence[] items1 = {"yes", "no"};
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("slection confirmation");
builder.setCancelable(false);
builder.setSingleChoiceItems(items1, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selection = (String) items1[which];
Toast.makeText(getApplicationContext(), items1[which], Toast.LENGTH_SHORT).show();
}
});
builder.setNeutralButton("OK",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (selection)
{
case("yes"):
Intent myint=new Intent(MainActivity.this,secondpage.class);
myint.putExtra("act1","");
startActivity(myint);
break;
case("no"):
dialog.cancel();
break;
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
}
}
您正在 Intent 中对 second.class
进行硬编码,而是尝试使用一个动态变量,该变量根据您单击的项目[=12= 保存 class 的值]
public static Activity ClASS_NAME;
//set CLASS_NAME based on item position for example
switch (selection)
{
case("yes"):
Intent myint=new Intent(MainActivity.this,CLASS_NAME);
myint.putExtra("act1","");
startActivity(myint);
break;
case("no"):
dialog.cancel();
break;
}
首先,为不同活动的所有 class 名称创建字符串资源。在你的 'res/strings.xml' 文件中,你可以写
<string name="sFirstClass">my.package.name.MyFirstClass</string>
<string name="sSecondClass">my.package.name.MySecondClass</string>
请注意,使用活动的完整路径很重要。
然后,在 OnItemClickListener
的 'onItemClick()' 方法中,定义一个 String 变量并根据单击的列表项的位置对其进行初始化。
// 'final' is important so the String will be visible
// inside the dialog button's 'onClick()' method
final String SECONDPAGE_CLASS = getMyClass(position);
其中'getMyClass()'是匹配位置和目标的方法activity:
private String getMyClass(int pos)
{
String myClass;
switch (pos)
{
case 0: myClass = getString(R.string.sFirstClass);
break;
case 1: myClass = getString(R.string.sSecondClass);
break;
//...
default: // do whatever is appropriate
}
return myClass;
}
现在,对于您的确定按钮,您可以将 Intent
定义为
try
{
Intent myint = new Intent(MainActivity.this, Class.forName(SECONDPAGE_CLASS));
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}