【问题标题】:Setting onItemClickListener in a Main Activity that extends ListView在扩展 ListView 的 Main Activity 中设置 onItemClickListener
【发布时间】:2016-06-10 19:06:14
【问题描述】:

我有以下问题。我构建了一个 listView,然后使用自定义布局 item_event 显示某些数据。这一切都有效。现在我想让应用程序允许我在每次单击 listView 中的一个元素时移动到新的活动。我的 MainMenu 扩展了 ListActivity,因此我可以使用 setListAdapter。我现在如何使用 setOnItemClickListener?我试图创建 ListView 对象,然后引用它,但由于它的 android:id="@android:id/list"/> ,我无法访问它。怎么做?

package com.mysampleapp;

import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.app.ListActivity;


import com.userpreferencesom.AmazonClientManager;
import com.userpreferencesom.DynamoDBManager;

import java.util.ArrayList;



public class MainMenu extends ListActivity {

    //ListView eventsList;
    Button newEvent;
    Event event= new Event();
    //ArrayList<Event> eventList = new ArrayList();


    public static AmazonClientManager clientManager = null;

    private ArrayAdapter<String> arrayAdapter = null;
    private ArrayList<String> labels = null; // list of names of events manly for test)
    private ArrayList<Event> items = null;  //stores events

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

        clientManager = new AmazonClientManager(this); //CIPEK
        new GetEventList().execute(); //calling GetEventList from included class below

        newEvent = (Button) findViewById(R.id.new_event_button);

        newEvent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainMenu.this, EventCreationActivity.class);
                startActivity(intent);
            }
        });


    }

    private void setupActivity() {
        Log.v("MOJEMOJEMOJE", event.getName());
    }

    private class GetEvent extends AsyncTask<Void, Void, Void> {

        protected Void doInBackground(Void... voids) {

            event = DynamoDBManager.getEvent("");  //in bracket ID number
            return null;
        }

        protected void onPostExecute(Void result) {

            setupActivity();
        }
    }


    private class GetEventList extends AsyncTask<Void, Void, Void> {

        protected Void doInBackground(Void... inputs) {

            labels = new ArrayList<String>();

            items = DynamoDBManager.getEventList();

            for (Event up : items) {
                labels.add(up.getName());
            }

            return null;
        }

        protected void onPostExecute(Void result) {

            Log.v("Events:", labels.toString());
            updateDisplay();

        }
    }

    public void updateDisplay(){
        //Using Event Adapter to display data
        EventAdapter adapter = new EventAdapter(this, R.layout.item_event, items);
        setListAdapter(adapter);

        setOnItemClickListener(new AdapterView.OnItemClickListener() { //HERE IT CANNOT BUILD
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(MainMenu.this, EventViewActivity.class);
                startActivity(intent);
            }
        });
    }

}

提前谢谢你, 约翰

这是错误日志:

C:\Users\John\Desktop\trial\cos1\HangApp-0.5\app\src\main\java\com\mysampleapp\MainMenu.java
Error:(110, 9) error: cannot find symbol method setOnItemClickListener(<anonymous OnItemClickListener>)
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:app:compileDebugJavaWithJavac FAILED
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

【问题讨论】:

  • 如果您包含遇到的错误可能会有所帮助
  • 有什么错误吗? Bcoz 你的 setOnItemCliclListener 看起来不错。请同时发布错误消息

标签: android listview


【解决方案1】:

你可以OverrideonListItemClick处理事件当你点击你的ListView的每一项时

public class MainMenu extends ListActivity
    ...
    ...
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Toast.makeText(this, "click at " + position,Toast.LENGTH_LONG).show();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多