2012-01-11 193 views
0

我有一个用于输入名称的EditText框。输入名称并单击添加按钮后,我需要将名称保存到Array中,该名称可以用于下一个活动,并且还可以清除EditText框。我想我有这个工作,但不确定是否正确,你可以看到下面的代码。在OnClick中添加视图

当单击添加按钮时,我的实际问题有点不同我也需要它显示添加按钮旁边添加了它自己的删除按钮的名称,如果添加了更多,它们需要显示在下面一种列表视图。如果点击删除按钮,则需要删除名称并从屏幕上删除按钮,并将名称从阵列中移出。

代码已经更新我试图从一个适配器填充ListView但没有sucsess到目前为止

enter image description here

我想这样添加TextViewButtononClick方法中。当点击按钮Remove时,我需要从playerList中删除TextView字符串。我想我也将不得不删除View,这样就不能再看到它了。

任何帮助我在代码方面似乎无法弄清楚。

public class AddRemove extends Activity { 

ArrayList<String> playerList = new ArrayList<String>(); 
String playerlist[]; 
ListView listview; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
setContentView(R.layout.addremove); 
ListView listView = (ListView)findViewById(R.id.namelistview); 
listview.setAdapter(new myAdapter(getApplicationContext(), R.layout.listview_content, list)); 

Button confirm = (Button) findViewById(R.id.add); 
confirm.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
EditText playername = (EditText) findViewById(R.id.userinput); 
String name = playername.getText().toString(); 
playerList.add(name); 
playername.setText(""); 

}}); 

Button play = (Button) findViewById(R.id.playnow); 
play.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
Intent i = new Intent(demo.AddRemove.this, demo.PasswActivity.class); 
Bundle extras = new Bundle(); 
extras.putSerializable("com.example.playerList", playerList); 
i.putExtras(extras); 
startActivity(i); 

}}); 
} 

class myAdapter extends ArrayAdapter{ 

List<String> users; 
public myAdapter(Context context, int textViewResourceId, List<String> list) { 
super(context, textViewResourceId); 
// assign list 
users = list; 
// TODO Auto-generated constructor stub 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
// TODO Auto-generated method stub 
return super.getView(position, convertView, parent); 

} 

} 
} 

listview_content XML

<TextView 
    android:id="@+id/playername" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 

<Button 
    android:id="@+id/remove" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Remove" /> 

回答

2

您应该使用一个ListView显示人的列表。在此列表中,您将在每行中有一个包含2个组件的布局。这些将包括一个TextView和一个Button,该人员的名称和用于删除该组件的按钮。单击该按钮时,从适配器中移除项目并通知ListView它已更改。

当您配置您的ListView时,您的适配器将需要一个将用于配置ListView的每一行的自定义适配器。

更新

示例代码:

所有的

http://android.vexedlogic.com/2011/04/02/android-lists-listactivity-and-listview-ii-%E2%80%93-custom-adapter-and-list-item-view/

+0

所以我可以在我的XML中添加'Button'和'TextView'到ListView中?你能用java开始我还是可以加入聊天? – Matt 2012-01-11 13:55:05

+1

+1。带有自定义适配器的ListView似乎是您的案例中的最佳选择。 – 2012-01-11 14:24:08

0

首先,你需要上下文的引用来初始化每个TextView的。所以,在你onClick,因为它是在ViewOnClick.java:

public class ViewOnClick extends Activity { 
    LinearLayout.LayoutParams layoutParams; 
    LinearLayout ll; 
    static int i; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button b = (Button)findViewById(R.id.Button01); 
     ll = (LinearLayout)findViewById(R.id.ll); 
     layoutParams = new LinearLayout.LayoutParams 
     (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     b.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       TextView view = new TextView(ViewOnClick.this);    
       view.setText(++i+" view"); 
       ll.addView(view, layoutParams); 

      }}); 
    } 
} 

其次,因为你必须在的onCreate setContentView通话这也增加了你的LinearLayout的视图,你不需要调用setContentView(linearLayout)每次按钮被点击。

+0

我们可以加入聊天吗? – Matt 2012-01-11 14:01:34

+0

我不会推荐您遵循当前的方法。这对用户来说不是最佳的。 – JoxTraex 2012-01-11 14:02:12