私はListView
-getListView()
の- を持っていListActivity
ます。はListView
正しく設定されており、問題ありません。
いずれかのListView
項目をクリックすると、4 つのタイトル TextView と 4 つのユーザー入力 Number EditText で構成されるダイアログが開きます。可能であれば、それらのそれぞれEditText
またはアイテムに Tag オブジェクトをアタッチし、.ListView
EditText
TextWatcher
つまりTextwatcher
、テキストに変更が加えられた場合、対応するタグで更新されます。
これにより、EditText
既に設定されている既存の値にテキストを設定できます。
問題は、ダイアログが表示されたら、EditText
値を入力し、正のボタンを押して閉じることです。値を表示する前に再度開いてタグを取得してEditText
値を設定すると、それらはすべて0になります(位置を除く-これは重要ではありません)
私の onListItemClick コードを以下に示します。
// On Routine Selected
@Override
protected void onListItemClick(ListView l, View view, int position, long id)
{
// Get the tag from 'v'
if (view.getTag() == null)
{
// Create a new Set object and set that as the tag
Set newTag = new Set(position);
view.setTag(newTag);
}
// Getting the Set tag from the ListView item
Set vTag = (Set) view.getTag();
/* ** Now an AlertDialog is presented to the user with a custom inflated view including EditTexts ** */
// Getting an inflater (getLayoutInflater()) also works
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Inflating the XML defined layout as a view
final View setView = inflater.inflate(R.layout.set_dialog, null);
// Get EditText XML references
EditText etReps = (EditText) setView.findViewById (R.id.etReps);
EditText etIntensity = (EditText) setView.findViewById (R.id.etIntensity);
EditText etPosition = (EditText) setView.findViewById (R.id.etPosition);
EditText etChange = (EditText) setView.findViewById (R.id.etChange);
Log.d(TAG, "vTag.getReps(): " + (vTag.getReps() + 1));
try
{
// Set the EditText values to values from the Set Tag
etReps.setText(String.valueOf(vTag.getReps()));
etIntensity.setText(String.valueOf(vTag.getIntensity()));
etPosition.setText(String.valueOf(vTag.getPositionInExercise()));
etChange.setText(String.valueOf(vTag.getIntensityChange()));
// Add Custom TextWatcher listener to all EditTexts
etReps.addTextChangedListener(new MyTextWatcher(setView));
etIntensity.addTextChangedListener(new MyTextWatcher(setView));
etPosition.addTextChangedListener(new MyTextWatcher(setView));
etChange.addTextChangedListener(new MyTextWatcher(setView));
}
catch (Exception e)
{
Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
}
// Create a new Builder to create the dialog
AlertDialog.Builder builder = new AlertDialog.Builder(ExerciseList.this);
builder.setTitle(vTag.getName());
builder.setView(setView);
builder.setPositiveButton("Save", new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
if (which == dialog.BUTTON_POSITIVE)
{
// setView.setTag(tag);
dialog.dismiss();
}
}
});
builder.show();
}
MyTextWatcher コード..
//Custom Watcher
class MyTextWatcher implements TextWatcher
{
View view;
public MyTextWatcher(View setView)
{
view = setView;
}
@Override
public void afterTextChanged(Editable editable)
{
String newText = editable.toString();
Set tag = (Set) view.getTag();
switch (view.getId())
{
case R.id.etReps:
tag.setReps(Integer.parseInt(newText));
break;
case R.id.etIntensity:
tag.setIntensity(Integer.parseInt(newText));
break;
case R.id.etPosition:
tag.setPositionInExercise(Integer.parseInt(newText));
break;
case R.id.etChange:
tag.setIntensityChange(Integer.parseInt(newText));
break;
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){}
}
方向へのアドバイスや操縦は素晴らしいでしょう!