を使用notifyDataSetChanged
して、リスト ビューを更新して、リスト ビューの 1 行をパスワード ドットからプレーン テキストに変更し、パスワード ドットに戻そうとしています。
私のアダプター(ここのコメントに基づいて変更)で、その行にあるオブジェクトのタイプを確認します。行がパスワードの場合、私はそれを設定しました
setTransformationMethod(new PasswordTransformationMethod());
パスワードテキストをドットに変えるため。アクティビティの後半でその行をクリックすると、タイプが「notPass」に変わります。リストビューを更新しnotifyDataSetChanged
て、表示されるテキストとして表現しようとしています。
public class UserAccountAdapter extends ArrayAdapter<UserAccountData> {
Context context;
int layoutResourceId;
UserAccountData data[] = null;
TreeSet<String> mSeparatorsSet = new TreeSet<String>();
public UserAccountAdapter(Context context, int layoutResourceId,
UserAccountData[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
UserAccountDataHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new UserAccountDataHolder();
holder.imgIcon = (ImageView) row.findViewById(R.id.imgUserAccountIcon);
holder.txtTitle = (TextView) row.findViewById(R.id.txtTitle);
row.setTag(holder);
} else {
holder = (UserAccountDataHolder) row.getTag();
}
UserAccountData userAccountData = data[position];
holder.txtTitle.setText(userAccountData.title);
//hold
er.txtTitle.setTransformationMethod(new PasswordTransformationMethod());
holder.imgIcon.setImageResource(userAccountData.icon);
if(userAccountData.type.equals("pass")){
((TextView) row.findViewById(R.id.txtTitle)).setTransformationMethod(new PasswordTransformationMethod());
}
else{
((TextView) row.findViewById(R.id.txtTitle)).setTransformationMethod(null);
}
return row;
}
static class UserAccountDataHolder {
ImageView imgIcon;
TextView txtTitle;
}
}
アダプターに与えるオブジェクトは次のとおりです。
public class UserAccountData {
public int icon;
public String type;
public String title;
public UserAccountData(){
super();
}
public UserAccountData(int icon, String title, String type) {
super();
this.icon = icon;
this.title = title;
this.type = type;
}
public void setType(String type){
this.type = type;
}
}
そして、clickListener を扱う私のアクティビティ部分は次のとおりです。
usersArray = new UserAccountData[user_data.size()];
user_data.toArray(usersArray);
final UserAccountAdapter adapter = new UserAccountAdapter(this,
R.layout.user_accounts_row, usersArray);
userAccountsListView = (ListView) findViewById(R.id.userAccounts);
userAccountsListView.setAdapter(adapter);
userAccountsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(adapter.getItem(position).type.equals("pass")){
adapter.getItem(position).setType("notPass");
adapter.notifyDataSetChanged();
}
else if(adapter.getItem(position).type.equals("notPass")){
adapter.getItem(position).setType("pass");
adapter.notifyDataSetChanged();
}
現在、ドット付きのパスワード フィールドをクリックすると、そのフィールドはドットのままであり、ユーザー/メール/電話タイプの他のフィールドのすべてではありませんが一部もドットに変わります。
私は何が間違っているのですか?
更新: 問題を解決しました。1) if / if ではなく、else if が必要でした。2)コメントの1つに基づいてアダプターを変更しました