【问题标题】:How to make the filtered search result to display in listview in android如何使过滤后的搜索结果显示在android的listview中
【发布时间】:2014-03-13 20:04:40
【问题描述】:

我有一个edittext和一个listview,其中包含数据,所以在edittext中给出关键字后,应该显示listview中的相关关键字。为此,我已经完成了编码..但是在过滤了所需的项目之后。当我单击它时。它不会打开该项目示例如果列表包含三个项目 aa、bb 和 cc。如果我搜索 cc 项目然后单击它打开一个项目..所以请告诉我如何解决这个问题...

           package com.example.education;

    import java.util.ArrayList;

    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;

    public class FirstActivity extends Activity implements OnItemClickListener {

private ListView listview;
private ArrayList<Temple> arraylist;
private ArrayAdapter<Temple> adapter;
            private EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first);
    init();
}

private void init() {
    listview=(ListView)findViewById(R.id.listView1);
    arraylist=new ArrayList<Temple>();
    arraylist.add(new Temple("Birla","ttttt",R.drawable.birla));
    arraylist.add(new Temple("Badrinath", "ddddd",R.drawable.badrinath));
            arraylist.add(new Temple("ganga", "dddddd",R.drawable.ganga));
  adapter=new ArrayAdapter<Temple>(this,android.R.layout.simple_list_item_1,arraylist );
    listview.setAdapter(adapter);
    listview.setOnItemClickListener(this);
   et.addTextChangedListener(new TextWatcher() {

        @Override
   public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3)         {
            // When user changed the Text
            First.this.adapter.getFilter().filter(cs);   
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,  int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub  

        }
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_first, menu);
    return true;

}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int index, long arg3) {
    // TODO Auto-generated method stub
    Temple t= arraylist.get(index);
    Intent intent=new Intent(this,DetailActivity.class);
    intent.putExtra("Title",t.getTitle() );
    intent.putExtra("Desc",t.getDescription() );
    intent.putExtra("Img",t.imgId );
    startActivity(intent);
}

    }

二等 包 com.example.education;

    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.view.Menu;
    import android.widget.ImageView;
    import android.widget.TextView;

    public class DetailActivity extends Activity {


private TextView Title;
private TextView Description;
private ImageView Image;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    init();
}

private void init() {
    // TODO Auto-generated method stub

    Image=(ImageView)findViewById(R.id.imageView1);
    Title=(TextView)findViewById(R.id.textView1);
    Description=(TextView)findViewById(R.id.textView2);
    Intent intent=getIntent();
   Title.setText(intent.getStringExtra("Title"));
   Description.setText(intent.getStringExtra("Desc"));
   Image.setImageResource(intent.getIntExtra("Img",R.drawable.ic_launcher));



}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_detail, menu);
    return true;
}

   }

三等 包 com.example.education;

        public class Temple {
         String Title;
         String Description; 
          int imgId;
          @Override
             public String toString() {
return "" + Title;
               }
            public Temple() {
super();
// TODO Auto-generated constructor stub
             }
             public Temple(String title, String description, int imgId) {
super();
Title = title;
Description = description;
this.imgId = imgId;
              }
         public String getTitle() {
return Title;
            }
            public void setTitle(String title) {
Title = title;
             }
           public String getDescription() {
return Description;
              }
           public void setDescription(String description) {
Description = description;
              } 

            public int getImgId() {
return imgId;
             }
           public void setImgId(int imgId) {
this.imgId = imgId;
               }



              }

【问题讨论】:

标签: java android listview search android-listview


【解决方案1】:

好的,通过阅读描述,我理解的是,由于存在三个项目,例如 aa、bb 和 cc,并且在其中搜索 cc 返回了一个项目,即 cc,其索引现在为 0。单击该按钮时,显示的选定项为 aa。问题在于这些指数。您正在使用 cc 的新索引,该索引为 0,但从旧索引中显示,其中 o 是 aa 的索引。

几年前我遇到这个问题时遇到了完全相同的问题。我所做的是添加一个额外的字段,将原始索引存储为对象中的字段。因此,当单击上述示例中的 cc 时,我会执行类似 cc.getOriginalIndex() 之类的操作,该操作将返回 2 并显示可以正常打印的结果。

如果这对您有意义,请尝试实现它,否则我们将进入代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2011-09-03
    • 1970-01-01
    • 2010-11-15
    • 2018-09-20
    • 2018-03-25
    • 2020-04-07
    相关资源
    最近更新 更多