Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中使过滤后的搜索结果显示在listview中_Java_Android_Listview_Search_Android Listview - Fatal编程技术网

Java 如何在android中使过滤后的搜索结果显示在listview中

Java 如何在android中使过滤后的搜索结果显示在listview中,java,android,listview,search,android-listview,Java,Android,Listview,Search,Android Listview,我有一个edittext和一个listview,其中包含数据,因此在edittext中给出关键字后,应该显示listview中的相关关键字。为此,我做了编码。。但在筛选所需项目后。当我单击它时。如果列表包含三个项目aa、bb和cc,它将不会打开该项目示例。如果我搜索cc项目,则在单击它后打开aa项目。因此,请告诉我如何解决此问题 package com.example.education; import java.util.ArrayList; impo

我有一个edittext和一个listview,其中包含数据,因此在edittext中给出关键字后,应该显示listview中的相关关键字。为此,我做了编码。。但在筛选所需项目后。当我单击它时。如果列表包含三个项目aa、bb和cc,它将不会打开该项目示例。如果我搜索cc项目,则在单击它后打开aa项目。因此,请告诉我如何解决此问题

           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;
}

   }
        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;
               }



              }

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

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


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

您应该正确设置代码格式,以便于其他人阅读。无论如何,您可能会发现这个答案很有用: