如何制作Listview项目视图视图可见onLongPress

时间:2018-05-28 06:47:39

标签: android listview

我在listview项目中有1个ImageView,1个textview和1个搜索栏。默认情况下,Seekbar的可见性为GONE。现在我想根据数据库值设置搜索栏的可见性。如果数据库值为YES,那么它将在长按时显示搜索条,如果是否,则在长按时它将不执行任何操作。目前,如果我长按任何项目,它会显示搜索栏。

ApplianceAdapter

public class ApplianceAdapter extends CursorAdapter {
public ApplianceAdapter(Context context, Cursor c) {
    super(context, c, 0);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.appliancelist, parent, false);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView txtApplianceName = (TextView) view.findViewById(R.id.txtApplianceName);
    final LinearLayout btnApp = (LinearLayout) view.findViewById(R.id.btnApp);
    final SeekBar slider = (SeekBar) view.findViewById(R.id.slider);

    String appliance = cursor.getString(cursor.getColumnIndexOrThrow("AppName"));
    String dimmer = cursor.getString(cursor.getColumnIndexOrThrow("Dimmer"));

    txtApplianceName.setText(appliance);
    if (dimmer.contains("YES")){
        btnApp.setLongClickable(true);
    }else if (dimmer.contains("NO")){
        btnApp.setLongClickable(false);
    }

}
}

设备活动

public class Appliance extends AppCompatActivity {

ListView listView;
ArrayList<HashMap<String,String>> applianceList;
DBOpenHelper db;
String room;
String type;
Cursor appliance;
ApplianceAdapter applianceAdapter;
SeekBar slider;

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

    Intent intent = getIntent();
    String r = intent.getStringExtra("roomname");
    room = r.replace("{name=", "").replace("}","");

    db = new DBOpenHelper(this);
    listView = (ListView) findViewById(R.id.listAppliance);
    appliance = db.getAppliance(room);
    applianceAdapter = new ApplianceAdapter(this, appliance);
    listView.setAdapter(applianceAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
     {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        }
    });

    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            slider = listView.getChildAt(position).findViewById(R.id.slider);
            slider.setVisibility(View.VISIBLE);
            return false;
        }
    });


}


}

1 个答案:

答案 0 :(得分:0)

你可以尝试

var IntegerParser = function(filter){

        this.parameter = '';
        this.filter = filter;
        var self = this;  // store this to self and use self in inner functions

        this.parse = function(parameter){
            self.parameter = parseInt(parameter); 
        }

        this.filterBy = function(item){
            return item[self.filter] == self.parameter;
        }
    }

在你的适配器中,

data = [{"stars": 3}, {"stars": 2}]

var ParseParameter = function(){
    this.parser = "";
}

ParseParameter.prototype = {
    setStrategy: function(parser) {
        this.parser = parser;
    },
 
    parse: function(parameter) {
        return this.parser.parse(parameter);
    }
};


var IntegerParser = function(filter){

    this.parameter = '';
    this.filter = filter;
    var self = this;

    this.parse = function(parameter){
        self.parameter = parseInt(parameter); 
    }

    this.filterBy = function(item){        
        return item[self.filter] == self.parameter;
    }
}
var filter = 'stars',
    parameter = '2',
    parseParameter = new ParseParameter();

var integerParser = new IntegerParser(filter);
    parseParameter.setStrategy(integerParser);
    parseParameter.parse(parameter);
    
    var dataFiltered = data.filter(parseParameter.parser.filterBy);

    console.log(dataFiltered);
相关问题