Как открыть новое действие, щелкнув элемент в списке?
Я не могу начать новое действие, перейдя по элементу в моем списке. Я хочу, чтобы onItemClick
мог открыть ApkInfoActivity
. Фактически, когда я нажимаю, ничего не происходит.
protected void onItemClick(ListView l, View v, int position, long id, AdapterView<?> parent) {
super.onListItemClick(l, v, position, id);
final ApplicationInfo app = applist.get(position);
PackageInfo packageInfo = (PackageInfo) parent.getItemAtPosition(position);
AppDataActivity appData = (AppDataActivity) getApplicationContext();
appData.setPackageInfo(packageInfo);
Intent appInfo = new Intent(getApplicationContext(), ApkInfoActivity.class);
startActivity(appInfo);
}
Я не могу найти проблему. Как я могу решить?
EDIT с логарифмом:
10-29 17:14:07.710: E/AndroidRuntime(3535): FATAL EXCEPTION: main
10-29 17:14:07.710: E/AndroidRuntime(3535): java.lang.ClassCastException: android.content.pm.ApplicationInfo cannot be cast to android.content.pm.PackageInfo
10-29 17:14:07.710: E/AndroidRuntime(3535): at com.dd.application.MainActivity.onItemClick(MainActivity.java:369)
10-29 17:14:07.710: E/AndroidRuntime(3535): at android.widget.AdapterView.performItemClick(AdapterView.java:297)
10-29 17:14:07.710: E/AndroidRuntime(3535): at android.widget.AbsListView.performItemClick(AbsListView.java:1149)
10-29 17:14:07.710: E/AndroidRuntime(3535): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2939)
10-29 17:14:07.710: E/AndroidRuntime(3535): at android.widget.AbsListView$2.run(AbsListView.java:3622)
10-29 17:14:07.710: E/AndroidRuntime(3535): at android.os.Handler.handleCallback(Handler.java:730)
10-29 17:14:07.710: E/AndroidRuntime(3535): at android.os.Handler.dispatchMessage(Handler.java:92)
10-29 17:14:07.710: E/AndroidRuntime(3535): at android.os.Looper.loop(Looper.java:137)
10-29 17:14:07.710: E/AndroidRuntime(3535): at android.app.ActivityThread.main(ActivityThread.java:5323)
10-29 17:14:07.710: E/AndroidRuntime(3535): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 17:14:07.710: E/AndroidRuntime(3535): at java.lang.reflect.Method.invoke(Method.java:525)
10-29 17:14:07.710: E/AndroidRuntime(3535): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:743)
10-29 17:14:07.710: E/AndroidRuntime(3535): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:559)
10-29 17:14:07.710: E/AndroidRuntime(3535): at dalvik.system.NativeStart.main(Native Method)
Ответы
Ответ 1
Используйте это для выполнения вашей работы
list.setOnItemClickListener(new AdapterView.onItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
Intent appInfo = new Intent(YourActivity.this, ApkInfoActivity.class);
startActivity(appInfo);
}
});
Ответ 2
public class MenuYangu extends ListActivity {
String classes[] = { "Quiz Trivia", "Sign A New User", "Friend List",
"Download A File", "Upload A File", "Select Pdf files", "Memory Game",
"Dzidza Maths", "Write Exam" };
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(Menuone.this,
android.R.layout.simple_list_item_1, classes));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
if (position == 0) {
Intent intent = new Intent(this, QuizActivity.class);
startActivity(intent);
}
else if (position == 1) {
Intent intent = new Intent(this, SignUp.class);
startActivity(intent);
}
else if (position == 2) {
Intent intent = new Intent(this, FriendList.class);
startActivity(intent);
}
}
}
}
Ответ 3
Используйте это:
Intent appInfo = new Intent(CurrentActivity.this, ApkInfoActivity.class);
startActivity(appInfo);
Ответ 4
Попробуйте изменить видимость от protected
до public
для заголовка вашего метода.
Изменить
Теперь, когда я смотрю на это, ваш заголовок метода на самом деле ошибочен. Это должно быть следующее:
public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)
Переменные должны быть в том же порядке, что и в интерфейсе, который они реализуют.
Ответ 5
например, если u хочет открыть действие, основанное на текстовом клике в listview, т.е. если "abcd" является опцией, нажатой в списке, и вы хотите открыть действие с тем же именем "abcd", то выполните это.
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String temp=yourarray[position];
try{
Class myclass=Class.forName("yourpackagename."+temp);
Intent in=new Intent(this,myclass);
startActivity(in);
}catch(Exception e){
}
}
Ответ 6
Даю объяснение моему ответу. Я предполагаю, что вы настроили свой список в порядке, как в вашем опубликованном коде. Я рассмотрю только эту часть вашего кода:
super.onListItemClick(l, v, position, id);
Я этого не делаю.
В случае примера я дал:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
if(position==0){
Intent appInfo = new Intent(SwahiliService.this, DisplayActivity.class);
startActivity(appInfo);
}
if(position==1){
Intent english=new Intent(SwahiliService.this,EnglishService.class);
startActivity(english);
}
if(position==2){
Toast.makeText(getApplicationContext(),"You have selected pst3", Toast.LENGTH_LONG).show();
}
Я просто устанавливаю листер в свой список, который я назвал lv,
мой адаптер (который является владельцем моих элементов списка) устанавливает три переменные: вид, int для позиции и длинный аргумент:,
Я ссылаюсь на элемент, выбранный в списке, по его позиции, которая, как обычно, начинается с 0 (хотя вы можете создать экземпляр, чтобы начать с любого другого номера, как вы хотите, e int position = 1, начинает отсчет элемента в 1).
Отсюда вы можете использовать любую структуру управления для запуска активности по щелчку элемента, в моем случае я использовал цикл for, поскольку я предположил, что мой список имеет только три элемента, для более крупных элементов списка вы можете использовать for-loop.
Обратите внимание, как я начинаю свою новую деятельность, сначала ссылаясь на текущую деятельность следующим образом (SwahiliService.this), из которой можно безопасно заменить (это только ключевое слово), а затем следует за действиями, которые я хочу начать.
Надеюсь, теперь это более сложное.
Ответ 7
Добавьте setOnItemclickListener() для вашего списка.
Ответ 8
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
if(position==0){
Intent appInfo = new Intent(SwahiliService.this, DisplayActivity.class);
startActivity(appInfo);
}
if(position==1){
Intent english=new Intent(SwahiliService.this,EnglishService.class);
startActivity(english);
}
if(position==2){
Toast.makeText(getApplicationContext(),"You have selected pst3", Toast.LENGTH_LONG).show();
}
}});