Android 处理listview侦听器
我有一个带有搜索框的listView,用于搜索listView。我在分配每个项目以启动不同的活动时遇到问题,因为当我搜索时,项目的位置和id会发生变化,因为listView只显示搜索结果。有人能帮我吗 这是我的代码:Android 处理listview侦听器,android,android-listview,Android,Android Listview,我有一个带有搜索框的listView,用于搜索listView。我在分配每个项目以启动不同的活动时遇到问题,因为当我搜索时,项目的位置和id会发生变化,因为listView只显示搜索结果。有人能帮我吗 这是我的代码: public class MainActivity extends Activity implements OnItemClickListener { EditText edittext; ListView listview; String[] text
public class MainActivity extends Activity implements OnItemClickListener {
EditText edittext;
ListView listview;
String[] text = { "One", "Two", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten" };
int[] image = { R.drawable.one, R.drawable.two, R.drawable.three,
R.drawable.four, R.drawable.five, R.drawable.six, R.drawable.seven,
R.drawable.eight, R.drawable.nine, R.drawable.ten };
int textlength = 0;
ArrayList text_sort = new ArrayList();
ArrayList image_sort = new ArrayList();
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edittext = (EditText) findViewById(R.id.EditText01);
listview = (ListView) findViewById(R.id.ListView01);
listview.setAdapter(new MyCustomAdapter(text, image));
listview.setOnItemClickListener(this);
edittext.addTextChangedListener(new TextWatcher()
{
public void afterTextChanged(Editable s)
{
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after)
{
}
public void onTextChanged(CharSequence s, int start,
int before, int count)
{
textlength = edittext.getText().length();
text_sort.clear();
image_sort.clear();
for(int i=0; i<text.length; i++)
{
if (textlength <= text[i].length())
{
if (edittext.getText().toString().
equalsIgnoreCase((String) text[i].subSequence(0, textlength)))
{
text_sort.add(text[i]);
image_sort.add(image[i]);
}
}
}
listview.setAdapter(new MyCustomAdapter
(text_sort, image_sort));
}
});
}
class MyCustomAdapter extends BaseAdapter
{
String[] data_text;
int[] data_image;
MyCustomAdapter()
{
}
MyCustomAdapter(String[] text, int[] image)
{
data_text = text;
data_image = image;
}
MyCustomAdapter(ArrayList text, ArrayList image)
{
data_text = new String[text.size()];
data_image = new int[image.size()];
for(int i=0; i<text.size(); i++)
{
data_text[i] = (String) text.get(i);
data_image[i] = (Integer) image.get(i);
}
}
public int getCount()
{
return data_text.length;
}
public String getItem(int position)
{
return null;
}
public long getItemId(int position)
{
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = getLayoutInflater();
View row;
row = inflater.inflate(R.layout.listview, parent, false);
TextView textview = (TextView) row.findViewById(R.id.TextView01);
ImageView imageview = (ImageView) row.findViewById(R.id.ImageView01);
textview.setText(data_text[position]);
imageview.setImageResource(data_image[position]);
return (row);
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
// TODO Auto-generated method stub
//HOW SHOULD I HANDLE THE CLICKS HERE
}
}
public类MainActivity扩展活动实现了mclickListener{
编辑文本编辑文本;
列表视图列表视图;
String[]text={“一”、“二”、“三”、“四”、“五”、“六”、“七”,
“八”、“九”、“十”};
int[]image={R.drawable.one,R.drawable.two,R.drawable.three,
四,五,六,七,
R.drawable.8,R.drawable.9,R.drawable.ten};
int textlength=0;
ArrayList text_sort=新建ArrayList();
ArrayList image_sort=新建ArrayList();
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edittext=(edittext)findViewById(R.id.EditText01);
listview=(listview)findViewById(R.id.ListView01);
setAdapter(新的MyCustomAdapter(文本、图像));
setOnItemClickListener(this);
edittext.addTextChangedListener(新的TextWatcher()
{
公共无效后文本已更改(可编辑)
{
}
更改前的公共无效(字符序列、整数开始、,
整数计数,整数后)
{
}
public void onTextChanged(字符序列,int start,
前整数,整数计数)
{
textlength=edittext.getText().length();
text_sort.clear();
图像_sort.clear();
对于适配器的getView中的(int i=0;i,当您查找任何textview时,可以将标签设置为类似于your_text_view.setTag(“textview”+位置);
。
之后你可以使用
findViewWithTag()方法,以准确查找单击了哪个textview或listItem。例如:
内部GETVIEW
`RelativeLayout rel=null;
if(null==convertView){
之后
`最终相对值rel1=rel
// click Listener of day list
rel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String seletedPosition = (String) v.getTag();
String[] splitted = seletedPosition.split(":");
int tag = Integer.parseInt(splitted[1]);
mPosition = tag;
SELECTED_DATE = getItem(tag).date;
if(SELECTED_DATE.equals("something")){
startActivity(new Intent(OldActivityContext,NewActivity.class));}`
public类MainActivity扩展活动实现了mclickListener{
编辑文本编辑文本;
列表视图列表视图;
String[]text={“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”};
int[]image={R.drawable.1,R.drawable.2,R.drawable.3,R.drawable.4,R.drawable.5,R.drawable.6,R.drawable.7,R.drawable.8,R.drawable.9,R.drawable.10};
int textlength=0;
ArrayList text_sort=新建ArrayList();
ArrayList image_sort=新建ArrayList();
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edittext=(edittext)findViewById(R.id.EditText01);
listview=(listview)findViewById(R.id.ListView01);
setAdapter(新的MyCustomAdapter(文本、图像、准备内容());
setOnItemClickListener(this);
edittext.addTextChangedListener(新的TextWatcher(){
公共无效后文本已更改(可编辑){
}
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
public void onTextChanged(字符序列、int start、int before、int count){
textlength=edittext.getText().length();
text_sort.clear();
图像_sort.clear();
for(int i=0;i 如果(textlength在listview中搜索时使用过滤器,它将在同一适配器中容纳您的搜索结果,这样在listview中单击时就不会有任何出错的机会。下面是自定义过滤器的示例:键代表什么?您的代码似乎适用于我的应用程序,您能说明我应该如何将这些行放入代码中吗?我是一个be我的所有代码都在适配器类的getview中。此外,如果您想在getview之外访问它,可以执行以下操作:rel.findViewWithTag(“text:2”).setOnclickListener(onclickListener);
它将在listview的第二个位置为您提供相对布局。我应该如何获得额外的布局?我是初学者。如果您在开始的活动getIntent()中获得额外的布局,请获取“TypeOfExtra”()方法。
int i = getIntent().getExtras().getInt("key");
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater vi;
vi = (LayoutInflater) getContext().getSystemService(inflater);
rel = (RelativeLayout) vi.inflate(resource, rel, true);
} else {
rel = (RelativeLayout) convertView;
}
rel.setTag("Txt:" + position);`
// click Listener of day list
rel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String seletedPosition = (String) v.getTag();
String[] splitted = seletedPosition.split(":");
int tag = Integer.parseInt(splitted[1]);
mPosition = tag;
SELECTED_DATE = getItem(tag).date;
if(SELECTED_DATE.equals("something")){
startActivity(new Intent(OldActivityContext,NewActivity.class));}`
public class MainActivity extends Activity implements OnItemClickListener {
EditText edittext;
ListView listview;
String[] text = { "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten" };
int[] image = { R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four, R.drawable.five, R.drawable.six, R.drawable.seven, R.drawable.eight, R.drawable.nine, R.drawable.ten };
int textlength = 0;
ArrayList text_sort = new ArrayList();
ArrayList image_sort = new ArrayList();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edittext = (EditText) findViewById(R.id.EditText01);
listview = (ListView) findViewById(R.id.ListView01);
listview.setAdapter(new MyCustomAdapter(text, image,prepareIntent()));
listview.setOnItemClickListener(this);
edittext.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
textlength = edittext.getText().length();
text_sort.clear();
image_sort.clear();
for (int i = 0; i < text.length; i++) {
if (textlength <= text[i].length()) {
if (edittext.getText().toString().equalsIgnoreCase((String) text[i].subSequence(0, textlength))) {
text_sort.add(text[i]);
image_sort.add(image[i]);
}
}
}
listview.setAdapter(new MyCustomAdapter(text_sort, image_sort));
}
});
}
private ArrayList<Intent > prepareIntent(){
ArrayList<Intent> intentList = new ArrayList<Intent>();
for (int i = 0; i < text.length; i++) {
Intent intent = new Intent("your current activity","you wan to open activity");
intent.putExtra("key", text[i]);//here you set intent put extra as per your requirement.
intentList.add(intent);
}
return intentList;
}
class MyCustomAdapter extends BaseAdapter {
String[] data_text;
int[] data_image;
ArrayList<Intent> intentList;
MyCustomAdapter() {
}
MyCustomAdapter(String[] text, int[] image,ArrayList<Intent> intentList) {
data_text = text;
data_image = image;
this.intentList = intentList;
}
MyCustomAdapter(ArrayList text, ArrayList image) {
data_text = new String[text.size()];
data_image = new int[image.size()];
for (int i = 0; i < text.size(); i++) {
data_text[i] = (String) text.get(i);
data_image[i] = (Integer) image.get(i);
}
}
public int getCount() {
return data_text.length;
}
public String getItem(int position) {
return null;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row;
row = inflater.inflate(R.layout.listview, parent, false);
TextView textview = (TextView) row.findViewById(R.id.TextView01);
ImageView imageview = (ImageView) row.findViewById(R.id.ImageView01);
textview.setText(data_text[position]);
imageview.setImageResource(data_image[position]);
row.setTag(intentList.get(position));
return (row);
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
// TODO Auto-generated method stub
// HOW SHOULD I HANDLE THE CLICKS HERE
startActivity((Intent)view.getTag());
}