可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I can't start a new activity clicking over an item in my listview. I want that onItemClick
can open the ApkInfoActivity
.. Actually when i click nothing happen.
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);
}
I can't find the problem..How can i solve?
EDIT with logcat:
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:
Use This for doing your work
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:
You need to use Intent, You can also pass the clicked listview item data to your new activity.
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" };
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(getApplicationContext(),ApkInfoActivity.class);
intent.putExtra("name",classes[i]);
startActivity(intent);
}
});
}
Output:
You can find the whole tutorial here
回答4:
Add setOnItemclickListener() for your Listview.
回答5:
Use this:
Intent appInfo = new Intent(CurrentActivity.this, ApkInfoActivity.class);
startActivity(appInfo);
回答6:
Try changing the visibility from protected
to public
for your method header.
Edit
Now that I look at it, your method header is actually wrong. It should be the following:
public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)
The variables must be in the same order as they are in the Interface they implement.
回答7:
for instance if u want to open an activity based on the text u click in listview,ie if "abcd" is the option clicked on the listview and u want to open the activity with the very same name "abcd",then perform this ..
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){
}
}
回答8:
Giving an explanation to my answer. I assume that you have set your listview in order just as in your posted code. I will only review this part of your code:
super.onListItemClick(l, v, position, id);
I don't this is necessary.
In the case of the example I gave:
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();
}
I am just setting a lister to my listview which I have called lv,
my adapter(which is the holder of my listview items) sets three variables, a View, int for position and long for argument:,
I refer to the item selected on listview by its position which as usual starts at 0 (though you can instantiate it to start at any other number as you wish e,g int position=1, starts the item count at 1).
From here you can then use any control struct to start activity as per item clicked, in my case, I used a for loop since I assumed my listview has three items only, for larger listview items, you can use a for-loop.
Please note how I start my new activity by first referencing to current activity as follows (SwahiliService.this) of which can safely be replace by (this keyword only) and then follows the activity I want to start.
I hope this is now more elaborate.
回答9:
// Add ArrayList and ArrayAdapter:
final ArrayList<String> listItems = new ArrayList<String>();
listItems.add("image_one");
listItems.add("image_two");
listItems.add("image_three");
ArrayAdapter<String> myArrayAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, listItems);
myListView.setAdapter(myArrayAdapter);
// Add ArrayList of Classes:
final ArrayList<Class> intents = new ArrayList<Class>();
intents.add(image_one.class);
intents.add(image_two.class);
intents.add(image_three.class);
// Click on list item to open Class from ArrayList of Classes:
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
Intent listIntent = new Intent(getApplicationContext(),
intents.get(position));
startActivity(listIntent);
}
});
SEE IMAGE OF CLASS NAMES HERE
回答10:
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();
}
}});