如何在listview中动态添加或删除编辑文本

时间:2015-11-12 13:45:55

标签: android arraylist android-listview android-edittext

public class SoloPlayActivity extends BaseActivity implements View.OnClickListener{
private ListView case_list;
private RelativeLayout add_case;
private TextView num_case_textview;
private Button start_button;
ArrayList<ItemSoloplayCase> caseArrayList;
AdapterSoloplay adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_solo_play);
    initView();
    //처음에는 경우의 수가 아무것도 없음
    num_case_textview.setText("0");
    caseArrayList = new ArrayList<ItemSoloplayCase>();
    adapter = new AdapterSoloplay(this, caseArrayList, num_case_textview);
    case_list.setAdapter(adapter);
}

private void initView(){
    add_case = (RelativeLayout)findViewById(R.id.add_case);
    add_case.setOnClickListener(this);
    num_case_textview = (TextView)findViewById(R.id.num_case);
    start_button = (Button)findViewById(R.id.game_start);
    start_button.setOnClickListener(this);
    case_list = (ListView)findViewById(R.id.case_list);
    //리스트뷰에서 포커스를 잃지 않도록 한다.
    case_list.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
}
@Override
protected String getActionbarTitle() {
    return getString(R.string.solo_play_name);
}
//뒤로가기가 눌렸을때 추가한 경우의 수가 있을경우에만 다이얼로그 띄우고 경우의수가 비었다면 그냥 종료
@Override
public void onBackPressed() {
    if (!caseArrayList.isEmpty()) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("입력한 경우의 수는 모두 사라집니다. 정말로 닫겠습니까?")
                .setCancelable(false)
                .setPositiveButton("확인", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        SoloPlayActivity.this.finish();
                    }
                })
                .setNegativeButton("취소", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
    }
    else
        SoloPlayActivity.this.finish();
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.game_start:
            Toast.makeText(getApplicationContext(), "게임시작 버튼 누름", Toast.LENGTH_SHORT);
            break;
        case R.id.add_case:
            //경우의수 추가
            ItemSoloplayCase additem = new ItemSoloplayCase();
            caseArrayList.add(additem);
            num_case_textview.setText(Integer.toString(caseArrayList.size()));
            adapter.notifyDataSetChanged();
            break;
    }
}}

活动档案。

适配器文件。

public class AdapterSoloplay extends BaseAdapter {
private Context context;
private ArrayList<ItemSoloplayCase> caselist;
private TextView num_case;
//순서 갱신 오류, 해당 지운 에디트가 지워지지 않음
public AdapterSoloplay(Context context, ArrayList<ItemSoloplayCase> caselist, TextView num_case) {
    this.context = context;
    this.caselist = caselist;
    this.num_case = num_case;
}

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

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

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final Viewholder holder;
    if (convertView == null){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.item_case_input, parent, false);
        holder = new Viewholder();
        holder.order = (TextView) convertView.findViewById(R.id.order_num);
        holder.editText = (EditText)convertView.findViewById(R.id.input_case);
        holder.button_clear = (ImageButton)convertView.findViewById(R.id.remove_case);
        //순서는 현재 크기만큼
        holder.order.setText(Integer.toString(getCount()));

        convertView.setTag(holder);
    }
    else
        holder = (Viewholder)convertView.getTag();


    //클리어를 눌럿을때 제거하고 순서를 재정렬하고 갱신시킨다
    holder.button_clear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ItemSoloplayCase item = (ItemSoloplayCase)getItem(position);
            item = null;
            caselist.remove(position);
            notifyDataSetChanged();
            num_case.setText(Integer.toString(caselist.size()));
        }
    });

    return convertView;
}
class Viewholder {
    private EditText editText;
    private TextView order;
    private ImageButton button_clear;
}

} 我想在列表视图中动态添加或删除编辑文本。 “ 像图像。 enter image description here 如果我想删除第二个列表(在此图像中,b)但它删除了最后一个数据(在此图像中,d)。然后我点击添加按钮,它会生成最后一个数据..(在此图像中,编辑文本值d)。

以上是我的代码。帮助

请帮帮我。

1 个答案:

答案 0 :(得分:0)

向listview行xml文件添加linearlayout: 要动态地将EditText添加到此布局,请尝试以下操作:

EditText editText = new EditText(context);
editText.setHint(hint);
editText.requestFocus();
editText.setSelection(editText.getText().length());
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
linearlayout.addview(editText);