Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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
Android 处理listview侦听器_Android_Android Listview - Fatal编程技术网

Android 处理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

我有一个带有搜索框的listView,用于搜索listView。我在分配每个项目以启动不同的活动时遇到问题,因为当我搜索时,项目的位置和id会发生变化,因为listView只显示搜索结果。有人能帮我吗

这是我的代码:

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