自定义ListVIew和onclick

Fix*_*xus 5 android

这是我的代码 - 一切.我按照你的说法做了,但我仍然无法点击任何东西.我的意思是我可以点击但没有任何反应


package fixus.core;

import java.util.ArrayList;
import java.util.Iterator;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import fixus.lib.News;
import fixus.testing.DataInput;

public class NewserActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DataInput di = new DataInput();
        ArrayList news = di.getNews();

        NewsArrayAdapter naa = new NewsArrayAdapter(NewserActivity.this, R.layout.row, news);
        setListAdapter(naa);
        ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view,
          int position, long id) {
        Log.i("testy", "I Clicked on Row " + position + " and it worked!");
      }
    });


   }

    @Override
    /**
     * When the user selects an item in the list, do an action
     * @param ListView l
     * @param View v
     * @param int position
     * @param long id
     */
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        final int index = position;

        //You can add whatever you want to happen when you click here

        Log.i("testy", "I Clicked on Row " + index + " and it worked!");

    }


    private class NewsArrayAdapter extends ArrayAdapter {
        protected ArrayList items;

        public NewsArrayAdapter(Context context, int textViewResourceId, ArrayList items) {
            super(context, textViewResourceId, items);
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;

            if(v == null) {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.row, null);
            }

            News news = this.items.get(position);
            if(news != null) {
                TextView tt = (TextView) v.findViewById(R.id.toptext);
                TextView bt = (TextView) v.findViewById(R.id.bottomtext);

                if (tt != null) {
                      tt.setText("Name: "+ news.getName());
                }
                if(bt != null){
                      bt.setText("Status: "+ news.getUrl().toString());
                }
            }

            return v;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

如果你知道一个很好的教程/例子,它会向我展示我希望看到它的好方法:)

Wol*_*cow 9

在列表活动中,您应该执行的操作类似于以下内容:

public class YourClass extends ListActivity {
    //Your Variables
    ArrayList<Type> yourlist;
    YourAdapterClass adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        yourlist = new ArrayList<Type>();
        this.adapter = new YourAdapterClass(this, R.layout.row, yourlist);
        setListAdapter(this.adapter);
        //you might be able to see if the below works instead of overriding 
        ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        Log.i("testy", "I Clicked on Row " + position + " and it worked!");
      }
    });
    }

    @Override
    /**
     * When the user selects an item in the list, do an action
     * @param ListView l
     * @param View v
     * @param int position
     * @param long id
     */
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        final int index = position;

        //You can add whatever you want to happen when you click here

        Log.i("testy", "I Clicked on Row " + index + " and it worked!");

    }

//other methods can go here for you list


}
Run Code Online (Sandbox Code Playgroud)

你不希望onClickListener你的getView(...)方法在你的内部List Adapter,这就是你想要修改行的样子的方式(为每一行添加按钮,文本字段等),而不是你希望onClickListener在类中延伸ListActivity连接到你的Adapter

祝你好运,希望这有帮助

//编辑(添加更多信息)

你需要在onCreate方法中"将它添加到你的适配器"(参见上面的编辑代码)希望这应该可以解决问题.如果它仍然不起作用,请告诉我.如果这不起作用你可以尝试使用setOnItemClickListener我放在onCreate方法中的代码,如果仍然不起作用我会尝试检查一些教程(我会看看我能找到一个好的)

  • 我终于明白了!! 问题是我的行中的项目具有可点击和可聚焦的属性.我发现当它被设置时,不会调用OnItemClickListener.非常感谢你的帮助 (2认同)