【问题标题】:Android: onListItemClick in ActivityAndroid:活动中的onListItemClick
【发布时间】:2010-11-02 17:04:22
【问题描述】:

上次我在这里问了一个问题,我学到了很多,所以我想值得再试一次。

我在这个链接中使用 Fedor 的惰性列表: Lazy load of images in ListView

它就像一个魅力。但是,Fedor 正在扩展他的主要课程 Activity 而不是 ListActivity。因此,我不再能够使用 listItemClick 侦听器。 Eclipse 在onListItemClick() 周围声明了一些错误。当我转动时它会起作用

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
     // Intent launcher here
}

进入

   protected void onListItemClick(ListView l, View v, int position, long id) {
     // Intent launcher here
   }

但是意图启动器不起作用。 Toast 通知也没有。

当我将Activity 转为ListActivity 时,Eclipse 不会错开,但我的模拟器会强制关闭。

我如何获得

  • 要么onListItemClick()点击活动(首选)
  • 还是在不强制关闭的情况下将代码转换为ListActivity

非常感谢。

【问题讨论】:

    标签: java android eclipse lazylist


    【解决方案1】:

    listItemClickListener 附加到ListView。当您将 ListActivity 更改为 Activity 时,您的类不再有与之关联的视图,因此 Activity 类不知道如何处理 onListItemClickListener。

    您只需将侦听器附加到您的ListView

    listview.setOnItemClickListener(new OnItemClickListener(){
        @Override
        protected void onListItemClick(AdapterView<?> parent, View view, int position, long id){
            //Do stuff
        }
    });
    

    【讨论】:

    • 男人!!我迟到了大约一年半的懒加载派对,你仍然是一个救生员.... :-)
    【解决方案2】:

    我的答案是:

    1) @Falmarri 的代码需要一些更新
    2) 我建议的编辑被完全拒绝 XD
    3) Stackoverflow 不允许我写评论。

    代码如下:

    ListView listView = (ListView) findViewById(R.id.my_listview_in_layout);
    listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            //Do stuff
            //...
        }
    });
    


    参考: 根据 android.widget.AdapterView.OnItemClickListener ,公共方法onItemClick() 是单击项目时调用的方法{而不是未知的受保护方法onListItemClick() }

    【讨论】:

      【解决方案3】:

      我整天都在做这件事,在创建了自己的 ArrayAdapter 之后,我不知道如何更改列表中的课程。

      这是我发现如何做到这一点的方法。在我调用我的数组之后,我只是简单地完成了我在该方法中的代码。

      ListView lv =getListView();
      lv.setOnItemClickListener(this);
      

      然后我放了所有的文字

      public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                  long arg3) {
          String item = (String) getListAdapter().getItem(position);
      
          if (item.equals("Economy"))
          {
              Intent intent = new Intent(packages.this, economy.class);
              startActivity(intent);
          }
          else if (item.equals("Basic"))
          {
              Intent intent = new Intent(packages.this, basic.class);
              startActivity(intent);
          }
          else if (item.equals("Professional"))
          {
              Intent intent = new Intent(packages.this, professional.class);
              startActivity(intent);
          }
          else if (item.equals("Custom Applications"))
          {
              Intent intent = new Intent(packages.this, applications.class);
              startActivity(intent);
          }
      }
      

      在我设法使用自定义字体和背景完全自定义我的ListView 之间。我敢肯定,你们很多人并不在乎。但我退出了,并希望通过发布这个我将来可以帮助某人。

      【讨论】:

        【解决方案4】:

        对于非ListActivity 拥有ListView 的项目单击侦听器,您必须在ListView 上调用setOnItemClickedListener()(如果是,您可能需要使用findViewById() 来获取它来自 XML)

        不仅仅是覆盖ListActivityonListItemClickListener(),您可以在这里调用Activity 实现AdapterView.onItemClickedListener() 并将其作为参数传递给setOnItemClickedListener()

        (如果您阅读了ListActivity(我推荐)的源代码,您会发现它只是在幕后通过创建一个调用您覆盖的onListItemClick() 的内部侦听器对象来完成此操作。

        【讨论】:

          【解决方案5】:

          如果您使用的是ListActivity,那么您想做这样的事情:

          public class YourClass extends ListActivity implements OnItemClickListener{
          
              @Override
              public void onCreate(Bundle icicle){
                  super.onCreate(icicle);
                  setContentView(R.layout.your_layout);
          
                  getListView().setOnItemClickListener(this);
              }
          
              @Override
              public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                  // your stuff here
              }
          }
          

          这不是设置OnItemClickListener 的唯一方法。看看其他答案。这是我喜欢的方式,因为它更清晰,更易于阅读。

          【讨论】:

          • 做到了.. 非常感谢!这显然也适用于常规活动。
          • 这是什么?亲爱的上帝不要这样做。如果您正在扩展 listActivity,则不需要监听 onItemClickListener。如果您正在扩展 Activity,OnItemClickListener 并不适用于所有 Activity,因此您不应该将其实现到 Activity。
          • 我不完全按照。为什么它需要适用于所有活动?我只有一个想要应用它的列表。
          • @Falmarri 我不明白你的意思。 “如果你正在扩展 Activity,OnItemClickListener 并不适用于所有的 Activity,所以你不应该将它应用到 Activity 中”当然,它并不适用于所有的 Activity,这正如我们所期望的那样.
          • 我说的是一般的 OO 原则。 OnItemCLickListener 不适用于活动。您应该将 onItemClickListener 应用于它所适用的列表视图。
          【解决方案6】:

          FE.java

          package com.example.rfe;
          
          import java.io.File;
          import java.io.FileNotFoundException;
          import java.io.FileReader;
          import java.util.ArrayList;
          import java.util.List;
          import java.util.Scanner;
          import android.app.ListActivity;
          import android.os.Bundle;
          import android.view.Menu;
          import android.view.View;
          import android.widget.ArrayAdapter;
          import android.widget.ListView;
          import android.widget.Toast;
          public class FE extends ListActivity {
           public List<String> d = null;
              @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.file);
                  d = new ArrayList<String>();    
                  Scanner in = null;
                  File f = new File("/sdcard/input.txt");
                  try
                  {
                  in = new Scanner(new FileReader(f));
                  while(in.hasNext()==true)
                  {
                      d.add(in.nextLine());   
                  }
                  }catch (FileNotFoundException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
              }
                  ArrayAdapter<String> fileList =
                            new ArrayAdapter<String>(this, R.layout.row, d);
                           setListAdapter(fileList);
              }
           @Override
           protected void onListItemClick(ListView l, View v, int position, long id) 
           {
               String selection = l.getItemAtPosition(position).toString();
               Toast.makeText(this, selection, Toast.LENGTH_LONG).show();
              super.onListItemClick(l, v, position, id);
          }
          }
          

          【讨论】:

          • 这段代码工作我很难弄清楚,它可能对某人有帮助。你需要 2 个 XML 文件文件和行。
          【解决方案7】:

          假设您有数据源 Fruit 包含几个字符串。您可以将onCreate() 定义如下:

          setListAdapter(new ArrayAdapter<String>(this, R.layout.list_fruit,
                          FRUITS)); // context is this, style is list_fruit, Context, ,data_binding to FRUITs
          

          然后将onListItemClick()写成如下:

          protected void onListItemClick(ListView parent, View v, int position, long id) {
                          Toast.makeText(this,  " You selected  " + FRUITS[position], Toast.LENGTH_SHORT).show();
                  }
          

          我希望它对你有用:)

          【讨论】:

            【解决方案8】:

            我只是在onCreate() 中添加了以下内容:

                listvview.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                            long arg3) {
                        setPaymentDetails();
                    }
                });
            

            onCreate() 之外添加了setPaymentDetails()

            protected void setPaymentDetails()
            {
                Intent intent = new Intent(this, SetPaymentDetailsActivity.class);
                startActivity(intent);
            }
            

            【讨论】:

              猜你喜欢
              • 2013-03-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-17
              • 1970-01-01
              • 2011-09-23
              相关资源
              最近更新 更多