Java 如何从CustomAdapter将textColor设置为edittext

Java 如何从CustomAdapter将textColor设置为edittext,java,android,eclipse,Java,Android,Eclipse,我有一个有编辑文本的活动。在活动中,我还有一个ListView,它通过调用CustomAdapter具有搜索功能。我想做的是从自定义适配器访问EditText,因此如果搜索没有返回任何内容,我想将文本颜色更改为红色 我的适配器类: import java.util.ArrayList; import java.util.Locale; import android.app.Activity; import android.content.Context; import android.grap

我有一个有编辑文本的活动。在活动中,我还有一个ListView,它通过调用CustomAdapter具有搜索功能。我想做的是从自定义适配器访问EditText,因此如果搜索没有返回任何内容,我想将文本颜色更改为红色

我的适配器类:

import java.util.ArrayList;
import java.util.Locale;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Filter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class SetRowsCustomAdapter extends ArrayAdapter<SetRows> {
    Context context;
   int layoutResourceId;
   ArrayList<SetRows> data=new ArrayList<SetRows>(); //data = countryList
   private ArrayList<SetRows> originalList;
   private NameFilter filter;
   ImageHolder holder;

   public SetRowsCustomAdapter(Context context, int layoutResourceId, ArrayList<SetRows> data) {
       super(context, layoutResourceId, data);
       this.layoutResourceId = layoutResourceId;
       this.context = context;

       this.data = data;
       //this.data.addAll(data);

       this.originalList = new ArrayList<SetRows>();
       this.originalList.addAll(data);
   }

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

       if(row == null)
       {
           LayoutInflater inflater = ((Activity)context).getLayoutInflater();
           row = inflater.inflate(layoutResourceId, parent, false);

           holder = new ImageHolder();
           holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
           holder.txtID = (TextView)row.findViewById(R.id.txtModDate);
           holder.txtBen = (TextView) row.findViewById(R.id.txtBenefit);
           holder.txtNum = (TextView) row.findViewById(R.id.txtNameNum);
           holder.etS = (EditText) row.findViewById(R.id.etSearch);
           row.setTag(holder);
       }
       else
       {
           holder = (ImageHolder)row.getTag();
       }

       SetRows myImage = data.get(position);
       holder.txtTitle.setText(myImage.name);
       holder.txtID.setText(myImage.id);
       holder.txtNum.setText(myImage.num);
       holder.txtBen.setText(myImage.ben);
       holder.txtBen.setVisibility(View.GONE);
      return row;

   }

   static class ImageHolder
   {
       TextView txtTitle;
       TextView txtID;
       TextView txtBen;
       TextView txtNum;
       EditText etS;
   }
    @Override
    public Filter getFilter() {
        if (filter == null){
            filter  = new NameFilter();
        }
    return filter;
    }
    private class NameFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            constraint = constraint.toString().toLowerCase(Locale.US);
            FilterResults result = new FilterResults();
            if(constraint != null && constraint.toString().length() > 0) {
                ArrayList<SetRows> filteredItems = new ArrayList<SetRows>();
                for(int i = 0, l = originalList.size(); i < l; i++) {
                    SetRows nameList = originalList.get(i);
                    if(nameList.toString().toLowerCase(Locale.US).contains(constraint))
                        filteredItems.add(nameList);
                }
                result.count = filteredItems.size();
                result.values = filteredItems;
            }
            else {
                synchronized(this) {
                    result.values = originalList;
                    result.count = originalList.size();
                }
            }
        return result;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            data = (ArrayList<SetRows>)results.values;
            if (data.isEmpty()) {
                holder.etS.setText("ll");
                Toast.makeText(getContext(), "No result found", Toast.LENGTH_SHORT).show(); // returns blank
            }
            notifyDataSetChanged();
            clear();
            for(int i = 0, l = data.size(); i < l; i++)
                add(data.get(i));
            notifyDataSetInvalidated();
        }
    }
}

问题是因为您只有一个on holder,而引用已丢失

您应该为列表视图的每一行保存holder。 因此,请执行下一步:

  • 定义
    Map'问题是因为您只有on holder,而引用已丢失

    您应该为列表视图的每一行保存holder。 因此,请执行下一步:

    • 定义
      Map'问题是因为您只有on holder,而引用已丢失

      您应该为列表视图的每一行保存holder。 因此,请执行下一步:

      • 定义
        Map'问题是因为您只有on holder,而引用已丢失

        您应该为列表视图的每一行保存holder。 因此,请执行下一步:

        • 定义
          在构造函数中映射“”传递编辑文本引用并保留它。然后使用该引用更新颜色。为什么需要列表视图项之外的视图的holder?

          在构造函数中,传递编辑文本引用并保留它。然后使用该引用更新颜色。为什么需要列表视图项之外的视图的holder?

          在构造函数中,传递编辑文本引用并保留它。然后使用该引用更新颜色。为什么需要列表视图项之外的视图的holder?

          在构造函数中,传递编辑文本引用并保留它。然后使用该引用更新颜色。为什么您需要holder来创建列表视图项之外的视图?

          我只需使用
          活动
          上下文
          上进行转换,效果很好:)


          我所要做的就是简单地使用
          活动
          上下文
          上进行转换,效果很好:)


          我所要做的就是简单地使用
          活动
          上下文
          上进行转换,效果很好:)


          我所要做的就是简单地使用
          活动
          上下文
          上进行转换,效果很好:)


          我正在使用一个编辑文本,它使用一个搜索过滤器来允许用户搜索列表视图之外的内容。如何传递编辑文本的引用?通过构造函数,并将EditText类型的变量传递给适配器以保持不变。如何设置传递EditText类型的变量?我使用的编辑文本使用搜索过滤器,允许用户搜索列表视图之外的内容。如何传递编辑文本的引用?通过构造函数,并将EditText类型的变量传递给适配器以保持不变。如何设置传递EditText类型的变量?我使用的编辑文本使用搜索过滤器,允许用户搜索列表视图之外的内容。如何传递编辑文本的引用?通过构造函数,并将EditText类型的变量传递给适配器以保持不变。如何设置传递EditText类型的变量?我使用的编辑文本使用搜索过滤器,允许用户搜索列表视图之外的内容。如何通过构造函数传递对编辑文本的引用?如何设置传递类型为EditText的变量?
          01-09 19:34:25.566: E/AndroidRuntime(13668): FATAL EXCEPTION: main
          01-09 19:34:25.566: E/AndroidRuntime(13668): java.lang.NullPointerException
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at com.test.testing.SetRowsCustomAdapter$NameFilter.publishResults(SetRowsCustomAdapter.java:119)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at android.os.Handler.dispatchMessage(Handler.java:99)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at android.os.Looper.loop(Looper.java:137)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at android.app.ActivityThread.main(ActivityThread.java:5195)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at java.lang.reflect.Method.invokeNative(Native Method)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at java.lang.reflect.Method.invoke(Method.java:511)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
          01-09 19:34:25.566: E/AndroidRuntime(13668):    at dalvik.system.NativeStart.main(Native Method)
          
          EditText I = (EditText) ((Activity)context).findViewById(R.id.etSearch);
          I.setTextColor(Color.parseColor("#FFCCCC"));