0

如果这是一个非常基本的问题,我深表歉意,但是如果我从服务器上的文本文件中获取列表项,我该如何设置 onListItemClick?我想要做的只是在单击列表视图上的项目时显示祝酒词,但我似乎无法添加 onListItemClick 来执行此操作。我认为这是因为 try/catch ?

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class ListView extends ListActivity {
    public String[] ListItems = new String[]{};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        URL textUrl;
        try {
            textUrl = new URL("http://172.30.54.153/databases/result.txt");
            BufferedReader bufferReader = new BufferedReader(new InputStreamReader(textUrl.openStream()));
            String StringBuffer;
            String stringText = "";
            stringText.split(",");
            while ((StringBuffer = bufferReader.readLine()) != null) {
                stringText += StringBuffer;
            }
            String DbLines = new String(stringText);
            ListItems = DbLines.split(",");

            setListAdapter(new ArrayAdapter<String>( this,
            android.R.layout.simple_list_item_1, ListItems));
            bufferReader.close();

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void OnListItemClick(ListView Parent,View v, int position, long id) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "y"+ ListItems[position], Toast.LENGTH_LONG).show();
    }
}
4

3 回答 3

1

你的问题:

首先,您的私有事件侦听器的处理程序位于 中private,因此它不再是继承的方法,您的代码与以下内容有误private

private void OnListItemClick(ListView Parent,View v, int position, long id)

您必须使用扩大函数范围来覆盖方法,即publicprotected。建议,您应该使用@Override 标识符来确保您的继承意图。像这样修改您的代码(使用 @Override 和 protected 或 public):

@Override
protected void onListItemClick (ListView l, View v, int position, long id)
{
....
}

请参阅 SDK 指南: ListActivity.onListItemClick()

其次,你必须让你的列表视图监听点击事件:

更改您的类定义:

public class ListView extends ListActivity implements OnItemClickListener 
{
...
}

并在onCreate(). 此行将使用指定的侦听器注册当前列表活动(this):

this.setOnItemClickListener(this);
于 2013-04-01T04:33:29.967 回答
0

将此添加到您的 onCreate 中:

ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(ListView.this, "y"+ ListItems[position], Toast.LENGTH_LONG).show();
    }
});

并删除它:

private void OnListItemClick(ListView Parent,View v, int position, long id) {
    // TODO Auto-generated method stub
Toast.makeText(this, "y"+ ListItems[position], Toast.LENGTH_LONG).show();

}

您可能希望将您的类重命名为 MyListView 之类的名称以避免混淆

于 2013-04-01T03:21:10.243 回答
0

在 OnListItemClick 的 Lint
The method OnListItemClick(ListView, View, int, long) from the type ListActivity is never used locally

将其替换为:
protected void onListItemClick(ListView l, View v, int position, long id)

那是onListItemClick-on小写不是OnListItemClick-On大写

希望这有帮助!

于 2013-04-01T03:52:32.060 回答