11

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

我在这个链接中使用 Fedor 的惰性列表: 在 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
   }

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

当我打开ActivityaListActivity时,Eclipse 不会错开,但我的模拟器给了我一个关闭的力。

如何得到

  • onListItemClick()在活动中单击(首选)
  • 还是我将代码转换为ListActivity无需强制关闭?

提前非常感谢。

4

8 回答 8

30

一个 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
    }
});
于 2010-11-02T17:10:48.503 回答
1

我整天都在做这个,在自己制作之后,我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使用自定义字体和背景完全自定义我的。我敢肯定,你们很多人并不在乎。但是我退出了,并希望通过发布这个我将来可以帮助某人。

于 2012-04-17T03:45:41.783 回答
1

对于一个非ListActivity有一个项目点击监听器的 a ListView,你必须调用(如果它来自 XML setOnItemClickedListener()ListView你可能需要使用它)findViewById()

在这里,您将拥有调用实现并将其作为参数传递给 ,而不仅仅是覆盖ListActivity's 。onListItemClickListener()ActivityAdapterView.onItemClickedListener()setOnItemClickedListener()

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

于 2010-11-02T17:10:53.340 回答
1

我将我的答案写成:

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() }

于 2017-02-14T08:11:04.253 回答
0

假设您有数据源 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();
        }

我希望这个对你有用 :)

于 2013-05-31T14:05:49.150 回答
0

我只是在以下内容中添加了以下内容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-02-15T02:43:24.093 回答
0

如果您正在使用,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. 看看其他答案。这是我喜欢这样做的方式,因为它更清晰,更易于阅读。

于 2010-11-02T17:11:36.740 回答
0

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);
}
}
于 2013-03-21T15:27:19.353 回答