Add and Remove view dynamically, another approach

Last post show a example of "Add and Remove view dynamically", each Remove Button have its own OnClickListener object, each OnClickListener object refer to a specified view.


It's another approach: all Remove Buttons share a common OnClickListener object. Inside the OnClickListener, retrieve the associate addView from the trigger view by calling its getParent() method.


MainActivity.java
package com.blogspot.android_er.androiddynamicview;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

EditText textIn;
Button buttonAdd;
LinearLayout container;
TextView reList, info;

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

textIn = (EditText)findViewById(R.id.textin);
buttonAdd = (Button)findViewById(R.id.add);
container = (LinearLayout)findViewById(R.id.container);
reList = (TextView)findViewById(R.id.relist);
info = (TextView)findViewById(R.id.info);
info.setMovementMethod(new ScrollingMovementMethod());

buttonAdd.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
LayoutInflater layoutInflater =
(LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View addView = layoutInflater.inflate(R.layout.row, null);
TextView textOut = (TextView)addView.findViewById(R.id.textout);
textOut.setText(textIn.getText().toString());
Button buttonRemove = (Button)addView.findViewById(R.id.remove);
/*
final View.OnClickListener thisListener = new View.OnClickListener(){
@Override
public void onClick(View v) {
info.append("thisListener called:\t" + this + "\n");
info.append("Remove addView: " + addView + "\n\n");
((LinearLayout)addView.getParent()).removeView(addView);

listAllAddView();
}
};

buttonRemove.setOnClickListener(thisListener);
container.addView(addView);

info.append(
"thisListener:\t" + thisListener + "\n"
+ "addView:\t" + addView + "\n\n"
);
*/


buttonRemove.setOnClickListener(commonRemoveOnClickListener);
container.addView(addView);
info.append(
"CommonRemoveOnClickListener:\t" + commonRemoveOnClickListener + "\n"
+ "addView:\t" + addView + "\n"
+ "buttonRemove:\t" + buttonRemove + "\n\n");

listAllAddView();

}
});
}

private void listAllAddView(){
reList.setText("");

int childCount = container.getChildCount();
for(int i=0; i<childCount; i++){
View thisChild = container.getChildAt(i);
reList.append(thisChild + "\n");
}
}

View.OnClickListener commonRemoveOnClickListener = new View.OnClickListener(){
@Override
public void onClick(View v) {
info.append("this View clicked:\t" + v + "\n");
info.append("this Listener called:\t" + this + "\n");
View thisParentView = (View) v.getParent();
info.append("Remove thisParentView: " + thisParentView + "\n\n");
((LinearLayout)thisParentView.getParent()).removeView(thisParentView);

listAllAddView();
}
};

}


activity_main.xml and row.xml, refer to last post "Add and Remove view dynamically, keep track of child views".

Add and Remove view dynamically, another approach Add and Remove view dynamically, another approach Reviewed by Pendik on 11.10 Rating: 5

Tidak ada komentar:

Diberdayakan oleh Blogger.