【问题标题】:Listview - Opening a new activity with OnItemClickListenerListview - 使用 OnItemClickListener 打开一个新活动
【发布时间】:2015-12-15 22:06:29
【问题描述】:

我有一个列表视图,当用户使用 OnItemClickListener 选择列表中的项目时,我试图接收“点击”事件。应该发生的是,当单击列表项时,它应该打开一个新活动,但是,每次我运行应用程序并尝试单击任何列表项时都没有任何反应。我一直在试图找出我的代码可能有什么问题,但还没有找到解决方案,希望得到任何建议。

这是我的 Mainactivity 代码:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //linking of variable to the UI for list view element with id
    newsListView = (ListView) findViewById(R.id.newsFeedList);
    //create adapter
    adapter = new NewsListAdapter (this, R.layout.adapter_news_list, newsListData);
    //attach adapter to list view
    newsListView.setAdapter(adapter);
    EDANewsApp app = EDANewsApp.getInstance();
    //URL that we want to communicate with
    String url = "http://www.efstratiou.info/projects/newsfeed/getList.php";
    //Attach on item click listener to list view
    newsListView.setOnItemClickListener(listListener);
    //Create a request(we expect a JSON array as a response
    JsonArrayRequest jsonRequest = new JsonArrayRequest(url, listener, errorListener);
    //Submit the request
    app.requestQueue.add(jsonRequest);
}
AdapterView.OnItemClickListener listListener = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //Create an Intent
        Intent intent = new Intent(MainActivity.this, NewsItemActivity.class);
        NewsRecord record = new NewsRecord();
        //Add parameters
        intent.putExtra("NEWS_ITEM_ID", record.recordId);
        //Retrieve record object for selected news item
        newsListData.get(position);
        startActivity(intent);
    }
};

【问题讨论】:

    标签: android listview android-activity onitemclicklistener


    【解决方案1】:

    你没有开始新的活动。

    Intent intent = new Intent(MainActivity.this, NewsItemActivity.class);
    

    创建意图后,您必须调用

    startActivity(intent)
    

    来自活动。在您的代码中,这将是 MainActivity。 另请检查 NewsItemActivity 是否作为活动添加到 Manifest 文件中

    【讨论】:

    • 谢谢我已经添加了 startActivity(intent) 但仍然没有新的活动出现!
    • 请检查 NewsItemActivity 是否作为活动添加到 Manifest 文件中
    • logcat中有没有出现日志?
    • 哦……现在可以了。我更改了 newsListData.get(position) 的位置并将其置于意图之上:$
    【解决方案2】:

    就像亚当指出的那样,你错过了:

    startActivity(intent)
    

    所以你的代码必须是这样的:

    AdapterView.OnItemClickListener listListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //Create an Intent
            Intent intent = new Intent(MainActivity.this, NewsItemActivity.class);
            NewsRecord record = new NewsRecord();
            //Add parameters
            intent.putExtra("NEWS_ITEM_ID", record.recordId);
            //Retrieve record object for selected news item
            newsListData.get(position);
           startActivity(intent)
        }
    };
    

    【讨论】:

      【解决方案3】:

      @珍妮特·罗德里格斯: 我有你的问题。您缺少适配器。 见:

      adapter = new NewsListAdapter (this, R.layout.adapter_news_list, newsListData);
      

      您在此处设置自定义适配器。

      但在这里:

      AdapterView.OnItemClickListener listListener = new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {});
      

      在这里,您将获得一个从未在列表视图中使用过的不同适配器的 onitemclicklistener。 最后解决方案: 您可以直接从 listview 调用此方法。 喜欢:

      newsListView .setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                  Intent intent = new Intent(MainActivity.this, NewsItemActivity.class);
          NewsRecord record = new NewsRecord();
          //Add parameters
          intent.putExtra("NEWS_ITEM_ID", record.recordId);
          //Retrieve record object for selected news item
          newsListData.get(position);
         startActivity(intent);
      
              }
          });
      

      试试这个,如果有更多问题回复:

      【讨论】:

        【解决方案4】:
         protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
        //linking of variable to the UI for list view element with id
         newsListView = (ListView) findViewById(R.id.newsFeedList);
        //create adapter
         adapter = new NewsListAdapter (this, R.layout.adapter_news_list, newsListData);
        //attach adapter to list view
        newsListView.setAdapter(adapter);
        EDANewsApp app = EDANewsApp.getInstance();
        //URL that we want to communicate with
        String url = "http://www.efstratiou.info/projects/newsfeed/getList.php";
        //Attach on item click listener to list view
        newsListView.setOnItemClickListener(listListener);
        //Create a request(we expect a JSON array as a response
        JsonArrayRequest jsonRequest = new JsonArrayRequest(url, listener, errorListener);
        //Submit the request
        app.requestQueue.add(jsonRequest);
        
        // List View Listener
        
        list.setOnItemClickListener(new OnItemClickListener() {
        
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        
            Intent intent = new Intent(MainActivity.this, NewsItemActivity.class);
            NewsRecord record = new NewsRecord();
            //Add parameters
            intent.putExtra("NEWS_ITEM_ID", record.recordId);
            //Retrieve record object for selected news item
            newsListData.get(position);
            startActivity(intent);          
                    }
                });
        
        }
        

        将此代码替换到您的 oncreate 中,并请在单击侦听器上删除适配器视图,如果不是这样,这肯定会对您有所帮助,如果不是让我知道我会为您找到另一个完美的解决方案

        【讨论】:

          猜你喜欢
          • 2012-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多