2017-09-26 56 views
4

我试图开发一个活动,其中有一个自定义listViewCustomAdapter制成。如何禁用ListView中的以前的项目

该清单由TextViewEditText组成。 EditTextclicked时,它自动提取系统时间。

我想是当特定EditText被填满,我希望所有的以前的(上图)列表的顺序中的项目被禁用。

到目前为止,我已经尝试使用isEnabled()areAllItemsEnabled()函数使用position来返回各自的布尔值,但是不起作用。

请帮我实现上述。 enter image description here

谢谢。

这是我CustomAdapter类

public class SelectStnListByRoute extends BaseAdapter implements View.OnClickListener { 
 
    Context context; 
 
    ArrayList<StnNames> stnList; 
 
    LayoutInflater layoutInflater = null; 
 
    ViewHolder viewHolder; 
 
    private int mLastClicked; 
 

 
    public SelectStnListByRoute(Context context, ArrayList<StnNames> stnList) { 
 
     super(); 
 
     this.context = context; 
 
     this.stnList = stnList; 
 
     layoutInflater = LayoutInflater.from(context); 
 
    } 
 

 
    @Override 
 
    public int getCount() { 
 
     return stnList.size(); 
 
    } 
 

 
    @Override 
 
    public Object getItem(int position) { 
 
     return stnList.get(position); 
 
    } 
 

 
    @Override 
 
    public long getItemId(int position) { 
 
     return stnList.indexOf(getItem(position)); 
 
    } 
 

 
    public int getViewTypeCount() { 
 
     return 1; 
 
    } 
 

 
    @Override 
 
    public boolean areAllItemsEnabled() { 
 
     return false; 
 
    } 
 

 
    @Override 
 
    public boolean isEnabled(int position) { 
 
     if(position==position){ 
 
      return false; 
 
     } 
 
     return false; 
 
    } 
 

 
    @Override 
 
    public View getView(final int position, View convertView, ViewGroup viewGroup) { 
 
     int type = getItemViewType(position); 
 
     StnNames stnDetails = stnList.get(position); 
 
     viewHolder = new ViewHolder(); 
 
     if (convertView == null) { 
 
      convertView = layoutInflater.inflate(R.layout.footplate_custome_layout, null); 
 
      viewHolder.txtStnNAme = (TextView) convertView.findViewById(R.id.txtStnCode); 
 
      viewHolder.txtStnArr = (TextView) convertView.findViewById(R.id.txtArrivalTime); 
 
      viewHolder.txtStnDep = (TextView) convertView.findViewById(R.id.txtDepTime); 
 
      convertView.setTag(viewHolder); 
 
      viewHolder.txtStnArr.setTag(stnDetails); 
 
      viewHolder.txtStnDep.setTag(stnDetails); 
 
     } else { 
 
      viewHolder = (ViewHolder) convertView.getTag(); 
 
      viewHolder.txtStnArr.setTag(stnDetails); 
 
      viewHolder.txtStnDep.setTag(stnDetails); 
 
     } 
 
     viewHolder.txtStnNAme.setText(stnDetails.getStnCode()); 
 

 
      viewHolder.txtStnArr.setOnClickListener(new View.OnClickListener() { 
 
     @Override 
 
     public void onClick(View view) { 
 
      Log.e("Position: " , String.valueOf(position)); //Here I am getting the position of the row item clicked, where should I put the Onclick false for disabling all of the above fields using the position? 
 
     } 
 
    }); 
 
     viewHolder.txtStnDep.setOnClickListener(this); 
 
     viewHolder.txtStnArr = (TextView) convertView.findViewById(R.id.txtArrivalTime); 
 
     if (stnDetails.getArrivalTime() != null) { 
 
      viewHolder.txtStnArr.setText(stnDetails.getArrivalTime()); 
 
     } else { 
 
      viewHolder.txtStnArr.setText(""); 
 
     } 
 

 

 
     if (stnDetails.getDeptTime() != null) { 
 
      viewHolder.txtStnDep.setText(stnDetails.getDeptTime()); 
 
     } else { 
 
      viewHolder.txtStnDep.setText(""); 
 
     } 
 
     return convertView; 
 
    } 
 

 
    class ViewHolder { 
 
     TextView txtStnNAme, txtStnArr, txtStnDep; 
 
     int ref; 
 
    } 
 

 

 
    @Override 
 
    public void onClick(View view) { 
 
     int id = view.getId(); 
 

 
     switch (id) { 
 
      case txtArrivalTime: 
 
       TextView textViewArrVal = (TextView) view.findViewById(R.id.txtArrivalTime); 
 
       textViewArrVal.setClickable(false); 
 
       StnNames listItemsArrr = (StnNames) textViewArrVal.getTag(); 
 
       if (listItemsArrr.getArrivalTime() != getCurrentTime()) { 
 
        listItemsArrr.setArrivalTime(getCurrentTime()); 
 
        if (listItemsArrr.getArrivalTime() != null) { 
 
         int position = textViewArrVal.getSelectionStart(); 
 
         textViewArrVal.setText(listItemsArrr.getArrivalTime()); 
 

 
        } else { 
 
         textViewArrVal.setText(""); 
 
        } 
 
       } 
 
       break; 
 
      case txtDepTime: 
 
       TextView textViewDepVal = (TextView) view.findViewById(R.id.txtDepTime); 
 
       StnNames listItemsDepp = (StnNames) textViewDepVal.getTag(); 
 
       if (listItemsDepp.getDeptTime() != getCurrentTime()) { 
 
        listItemsDepp.setDeptTime(getCurrentTime()); 
 
        if (listItemsDepp.getDeptTime() != null) { 
 
         textViewDepVal.setText(listItemsDepp.getDeptTime()); 
 
        } else { 
 
         textViewDepVal.setText(""); 
 
        } 
 
       } 
 
       break; 
 
      default: 
 
       break; 
 
     } 
 

 
    } 
 
    public String getCurrentTime(){ 
 

 
     Calendar calendar = Calendar.getInstance(); 
 
     SimpleDateFormat mdformat = new SimpleDateFormat("HH:mm:ss"); 
 
     String arrDate = mdformat.format(calendar.getTime()); 
 
     return arrDate; 
 
    } 
 

 
}

+0

显示你的代码?你有什么尝试? – sushildlh

+0

把你的适配器代码,所以我们可以告诉你你必须做什么 – Fakher

+0

@sushildlh 我已编辑的问题,并添加了我的customAdapter类代码上面 – An08NY

回答

1

你可以这样做,如下所述 - :

你需要存储点击按钮的位置了。因此,在你的类

int mButtonSelected = -1; 

编辑初始化变量1.

然后做出一个改变你isEnabled方法

@Override 
public boolean isEnabled(int position) { 
    if(position<mButtonSelected){ 
     return false; 
    } 
    return true; 
} 

,将工作,如果被点击其他任意键。但你必须做你的onClick

mButtonSelected = position; 
notifyDataSetChanged(); 

让我它的工作与否

编辑

看到你的代码 - 变化如下:

public class SelectStnListByRoute extends BaseAdapter { 
Context context; 
ArrayList<StnNames> stnList; 
LayoutInflater layoutInflater = null; 
ViewHolder viewHolder; 
private int mLastClicked; 
private SQLiteDB sqLiteDB; 
int mArrivalSelected = -1; 
int mDepartSelected = -1; 

public SelectStnListByRoute(Context context, ArrayList<StnNames> stnList) { 
    super(); 
    this.context = context; 
    this.stnList = stnList; 
    layoutInflater = LayoutInflater.from(context); 
    sqLiteDB = new SQLiteDB(context); 
} 

@Override 
public int getCount() { 
    return stnList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return stnList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return stnList.indexOf(getItem(position)); 
} 

public int getViewTypeCount() { 
    return 1; 
} 

@Override 
public boolean areAllItemsEnabled() { 
    return false; 
} 

@Override 
public boolean isEnabled(int position) { 
    if (position <= mArrivalSelected) { 
     return false; 
    } 
    return true; 
} 

public boolean isEnabledd(int position) { 
    if (position <= mDepartSelected) { 
     return false; 
    } 
    return true; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup viewGroup) { 
    int type = getItemViewType(position); 
    StnNames stnDetails = stnList.get(position); 
    viewHolder = new ViewHolder(); 
    if (convertView == null) { 
     convertView = layoutInflater.inflate(R.layout.footplate_custome_layout, null); 
     viewHolder.txtStnNAme = (TextView) convertView.findViewById(R.id.txtStnCode); 
     viewHolder.txtStnArr = (TextView) convertView.findViewById(R.id.txtArrivalTime); 
     viewHolder.txtStnDep = (TextView) convertView.findViewById(R.id.txtDepTime); 
     convertView.setTag(viewHolder); 
     viewHolder.txtStnArr.setTag(stnDetails); 
     viewHolder.txtStnDep.setTag(stnDetails); 


    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
     viewHolder.txtStnArr.setTag(stnDetails); 
     viewHolder.txtStnDep.setTag(stnDetails); 

    } 


    viewHolder.txtStnNAme.setText(stnDetails.getStnCode()); 
    if (!isEnabled(position)) { 
     if (position <= mArrivalSelected) { 
      viewHolder.txtStnArr.setBackgroundColor(Color.parseColor("#ffa500")); 
      viewHolder.txtStnArr.setEnabled(false); 
      if (position < mArrivalSelected) { 
       viewHolder.txtStnDep.setEnabled(false); 
       viewHolder.txtStnDep.setBackgroundColor(Color.parseColor("#ffa500")); 
      } 
     } 
    } else { 
     viewHolder.txtStnArr.setEnabled(true); 
     viewHolder.txtStnDep.setEnabled(true); 
     viewHolder.txtStnArr.setBackgroundColor(Color.parseColor("#b4b4b4")); 
     viewHolder.txtStnDep.setBackgroundColor(Color.parseColor("#b4b4b4")); 
    } 
    viewHolder.txtStnArr.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Log.e("Position: ", String.valueOf(position)); 
      mArrivalSelected = position; 
      arrivalClick(view); 
      notifyDataSetChanged(); 
     } 
    }); 
    if (!isEnabledd(position)) { 
     if (position <= mDepartSelected) { 
      viewHolder.txtStnArr.setBackgroundColor(Color.parseColor("#ffa500")); 
      viewHolder.txtStnDep.setBackgroundColor(Color.parseColor("#ffa500")); 
      viewHolder.txtStnArr.setEnabled(false); 
      viewHolder.txtStnDep.setEnabled(false); 
     } else { 
      viewHolder.txtStnArr.setEnabled(true); 
      viewHolder.txtStnDep.setEnabled(true); 
      viewHolder.txtStnArr.setBackgroundColor(Color.parseColor("#b4b4b4")); 
      viewHolder.txtStnDep.setBackgroundColor(Color.parseColor("#b4b4b4")); 
     } 
    } 
    viewHolder.txtStnDep.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Log.e("Position: ", String.valueOf(position)); 
      mDepartSelected = position; 
      departureClick(view); 
      notifyDataSetChanged(); 
     } 
    }); 
    viewHolder.txtStnArr = (TextView) convertView.findViewById(R.id.txtArrivalTime); 
    if (stnDetails.getArrivalTime() != null) { 
     viewHolder.txtStnArr.setText(stnDetails.getArrivalTime()); 
    } else { 
     viewHolder.txtStnArr.setText(""); 
    } 


    if (stnDetails.getDeptTime() != null) { 
     viewHolder.txtStnDep.setText(stnDetails.getDeptTime()); 
    } else { 
     viewHolder.txtStnDep.setText(""); 
    } 

    return convertView; 
} 

class ViewHolder { 
    TextView txtStnNAme, txtStnArr, txtStnDep; 
    StnNames pos; 
    int ref; 
} 

public void arrivalClick(View view) { 
    TextView textViewArrVal = (TextView) view.findViewById(R.id.txtArrivalTime); 

    StnNames listItemsArrr = (StnNames) textViewArrVal.getTag(); 
    if (listItemsArrr.getArrivalTime() != getCurrentTime()) { 
     listItemsArrr.setArrivalTime(getCurrentTime()); 
     int stnId = listItemsArrr.getStnId(); 
     String arrClick = "arrival"; 
     String upSideKm = listItemsArrr.getStnUpsideKm(); 
     String downsideKm = listItemsArrr.getStnDownSideKm(); 
     String arrTime = getCurrentTime(); 
      /*  sqLiteDB.open(); 
       *//* long abc = sqLiteDB.insertJourneySchedule(stnId,arrTime,"",userId,journeyId,latitute,longitute,journyDate,arrClick);*//* 
       *//* long abcd = sqLiteDB.updateJourneySchedule(stnId,arrTime,"",userId,journeyId,latitute,longitute,journyDate,arrClick,downsideKm,upSideKm); 
       Log.e("arrclick",String.valueOf(abcd));*//* 
       sqLiteDB.close();*/ 
     if (listItemsArrr.getArrivalTime() != null) { 
      int position = textViewArrVal.getSelectionStart(); 
      textViewArrVal.setText(listItemsArrr.getArrivalTime()); 

     } else { 
      textViewArrVal.setText(""); 
     } 
    } 
} 

public void departureClick(View view) { 
    TextView textViewDepVal = (TextView) view.findViewById(R.id.txtDepTime); 
    StnNames listItemsDepp = (StnNames) textViewDepVal.getTag(); 
    if (listItemsDepp.getDeptTime() != getCurrentTime()) { 
     listItemsDepp.setDeptTime(getCurrentTime()); 
     String depTime = getCurrentTime(); 
     int stnId = listItemsDepp.getStnId(); 
     String depClick = "departure"; 
     String upSideKm = listItemsDepp.getStnUpsideKm(); 
     String downsideKm = listItemsDepp.getStnDownSideKm(); 
     sqLiteDB.open(); 
       /*long abc = sqLiteDB.insertJourneySchedule(stnId,"",depTime,userId,journeyId,latitute,longitute,journyDate,depClick);*/ 
       /*long abcd = sqLiteDB.updateJourneySchedule(stnId,"",depTime,userId,journeyId,latitute,longitute,journyDate,depClick,downsideKm,upSideKm); 
       Log.e("depclick",String.valueOf(abcd));*/ 
     sqLiteDB.close(); 
     if (listItemsDepp.getDeptTime() != null) { 
      textViewDepVal.setText(listItemsDepp.getDeptTime()); 
     } else { 
      textViewDepVal.setText(""); 
     } 
    } 
} 



public String getCurrentTime() { 

    Calendar calendar = Calendar.getInstance(); 
    SimpleDateFormat mdformat = new SimpleDateFormat("HH:mm:ss"); 
    String arrDate = mdformat.format(calendar.getTime()); 
    return arrDate; 
} 

} 
+0

mButtonSelected = position; 这是在onClick() – An08NY

+0

现在显示不是一个声明现在检查我对你的代码做了一些改变尝试这@ An08NY – UltimateDevil

+0

这必须为你工作@ An08NY – UltimateDevil

0

得到被点击,然后岗位设置的onclick假小于点击位置

行的位置如下:

viewHolder.txtStnArr.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Log.e("Position: " , String.valueOf(position)); 
      for (int i = 0; i < position; i++) { 
        viewHolder.txtStnArr.setEnable(false); 
      } 
      notifyDataSetChanged(); 
     } 
    }); 
+0

在这里,我得到被点击的行的位置。 viewHolder.txtStnArr.setOnClickListener(新View.OnClickListener(){ @Override 公共无效的onClick(查看视图){ Log.e( “位置:”,将String.valueOf(位置));} } ) ; 我应该在哪里为所有上述领域的onClick false? – An08NY

+0

在同一位听众使用for循环 – YoLo

+0

请参阅我更新的答案 – YoLo

相关问题