2014-03-26 162 views
0

在我的应用程序中,有一个列表视图,其中包含一些数据。在同一活动中有一个edittext和一个按钮。当我在edittext中输入某些内容时,我想将该文本添加到按钮单击的ListView上。如何做到这一点?请帮助...如何将项目添加到按钮单击列表视图?

这里是我的代码示例...

这是我customList适配器

public class MainActivity extends Activity 
{ 
    ListView list; 

    String[] web = { 
    "Google Plus", 
     "Twitter", 
     "Windows", 
     "Bing", 
     "Itunes", 
     "Wordpress", 
     "Drupal" 
} ; 

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

     EditText et = (EditText)findViewById(R.id.editText1); 
    Button b=(Button)findViewById(R.id.button1); 
    b.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
        Toast.makeText(MainActivity.this, "Button clicked...", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    CustomList adapter = new CustomList(MainActivity.this, web); 
    list=(ListView)findViewById(R.id.list); 
    list.setAdapter(adapter); 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
              int position, long id) { 
      Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show(); 

     } 
    }); 

这是我的适配器类

public class CustomList extends ArrayAdapter<String>{ 

private final Activity context; 
private final String[] web; 

public CustomList(Activity context, String[] web) { 
    super(context, R.layout.list_single, web); 
    this.context = context; 
    this.web = web; 

} 

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView= inflater.inflate(R.layout.list_single, null, true); 
    TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); 


    txtTitle.setText(web[position]); 


    return rowView; 
} 
} 
+2

获取文本。将它添加到数组并在适配器上调用notifyDataSetChanged。您也可以使用ArrayList – Raghunandan

回答

4

声明

final ArrayList<String> dataset = new ArrayList<String>(); 
Button b=(Button)findViewById(R.id.button1); 
list=(ListView)findViewById(R.id.list); 
list.setAdapter(adapter); 
final CustomList adapter = new CustomList(MainActivity.this, dataset, imageId); 
b.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View arg0) 
{ 
    dataset.add(et.getText().toString()); 
    adapter.notifyDataSetChanged(); 
} 
}); 

然后

private ArrayList<String> web; 
public CustomList(Activity context, ArrayList<String> web, Integer[] imageId) { 
super(context, R.layout.list_single, web); 

而且在getView

txtTitle.setText(web.get(position)); 

编辑:

public class MainActivity extends Activity 
{ 
EditText ed; 
CustomList adapter; 
ArrayList<String> list = new ArrayList<String>(); 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button b = (Button) this.findViewById(R.id.button1); 
    ListView lv = (ListView) this.findViewById(R.id.listView1); 
    ed= (EditText) this.findViewById(R.id.editText1); 
    adapter = new CustomList(this,list); 
    lv.setAdapter(adapter); 
    b.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      list.add(ed.getText().toString()); 
      adapter.notifyDataSetChanged(); 
      } 

    }); 

} 
} 

activity_main.xml中;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="16dp" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="Button" /> 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@id/button1" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/editText1" > 
    </ListView> 

</RelativeLayout> 

CustomList

public class CustomList extends ArrayAdapter<String>{ 

private ArrayList<String >web; 
LayoutInflater mInflater; 
public CustomList(Context context, ArrayList<String> web) { 
    super(context, 0, web); 
    mInflater= LayoutInflater.from(context); 
    this.web = web; 

} 
@Override 
public View getView(int position, View view, ViewGroup parent) { 

    View rowView= mInflater.inflate(R.layout.list_item,parent,false); 
    TextView txtTitle = (TextView) rowView.findViewById(R.id.textView1); 
    txtTitle.setText(web.get(position)); 
    return rowView; 
} 
} 

LIST_ITEM

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="26dp" 
     android:text="TextView" /> 

</RelativeLayout> 

enter image description here

+0

需要添加图片资源另外还要抛出IndexOutOfBounds Exception .. –

+0

@kalyanpvs其实是一个模型类会更好。要编辑它 – Raghunandan

+0

,也许你也可以纠正op的getView,以避免双重内存分配。 – Blackbelt

0

的ArrayList /列表/阵列添加项目,然后使用通知列表:

adapterObject.notifyDataSetChanged() 
+0

如何将该项添加到我的列表中?可以向我展示示例代码吗? – Nevaeh

0

你可以试试这个

ArrayList<String> web=new ArrayList<String>(); 
    b.setOnClickListener(new View.onClickListener(){ 
     @Override 
     public void onClick(View arg0) 
     { 
      web.add(et.getText().toString()); 
      adapter.notifyDataSetChanged(); 
     } 
    }); 
0

更新web和ImageId后。 您必须在适配器上调用notifyDataSetChanged。

试试这个代码的变化:从EDITTEXT上的按钮进行点击

EditText et = (EditText)findViewById(R.id.editText1); 


      Button b=(Button)findViewById(R.id.button1); 
    CustomList adapter = new CustomList(MainActivity.this, web, imageId); 
      b.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View arg0) 
       { 
    //update the data on the web and imageID 
        Toast.makeText(MainActivity.this, "Button clicked...", 
    Toast.LENGTH_SHORT).show(); 
    //call the notifydatasetChanged on the adapter 
    adapter.notifyDataSetChanged(); 
        } 
       }); 


     list=(ListView)findViewById(R.id.list); 
     list.setAdapter(adapter); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() 
     { 

      @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
              int position, long id) { 
         Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show(); 

        } 
       }); 
+0

从哪里可以获得editText中的文字? – Nevaeh

+0

这也是onclick事件的按钮,但在调用notifyDAtaSetChanged方法之前。 @Nevaeh –

相关问题