Android 从其他布局添加ListView项
在我的应用程序中,有两个layout first.xml和activity_main.xml。在第一个布局中,有一个按钮和列表视图(代码): 然后是第二个布局活动_main.xml:Android 从其他布局添加ListView项,android,android-listview,android-activity,Android,Android Listview,Android Activity,在我的应用程序中,有两个layout first.xml和activity_main.xml。在第一个布局中,有一个按钮和列表视图(代码): 然后是第二个布局活动_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="mat
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ListActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:id="@+id/input">
<EditText
android:id="@+id/editText_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="Add" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_above="@+id/input"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:orientation="vertical" >
</LinearLayout>
</RelativeLayout>
并且此活动已连接到ListActivity:
package com.example.listview2;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class ListActivity extends Activity {
private EditText etInput;
private Button btnAdd;
private ListView lvItem;
private ArrayList<String> itemArrey;
private ArrayAdapter<String> itemAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUpView();
}
private void setUpView() {
// TODO Auto-generated method stub
etInput = (EditText)this.findViewById(R.id.editText_input);
btnAdd = (Button)this.findViewById(R.id.button_add);
lvItem = (ListView)this.findViewById(R.id.listView_items);
itemArrey = new ArrayList<String>();
itemArrey.clear();
itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,itemArrey);
lvItem.setAdapter(itemAdapter);
btnAdd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
addItemList();
}
});
etInput.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_ENTER) {
addItemList();
}
return true;
}
});
}
protected void addItemList() {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
if (isInputValid(etInput)) {
itemArrey.add(0,etInput.getText().toString());
etInput.setText("");
itemAdapter.notifyDataSetChanged();
}
}
protected boolean isInputValid(EditText etInput2) {
// TODO Auto-generatd method stub
if (etInput2.getText().toString().trim().length()<1) {
etInput2.setError("Please Enter Item");
return false;
} else {
return true;
}
}
}
package com.example.listview2;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.KeyEvent;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
公共类ListActivity扩展了活动{
私人编辑文本输入;
专用按钮btnAdd;
私有ListView项目;
私人ArrayList itemArrey;
专用ArrayAdapter项适配器;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUpView();
}
私有void setUpView(){
//TODO自动生成的方法存根
etInput=(EditText)this.findViewById(R.id.EditText\u输入);
btnAdd=(Button)this.findviewbyd(R.id.Button\u add);
lvItem=(ListView)this.findViewById(R.id.ListView\u items);
ItemArray=新的ArrayList();
itemArrey.clear();
itemAdapter=newArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,itemArray);
lvItem.setAdapter(itemAdapter);
btnAdd.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
addItemList();
}
});
etInput.setOnKeyListener(新视图.OnKeyListener(){
公共布尔onKey(视图v、int keyCode、KeyEvent事件){
//TODO自动生成的方法存根
if(keyCode==KeyEvent.keyCode\u输入){
addItemList();
}
返回true;
}
});
}
受保护的void addItemList(){
//TODO自动生成的方法存根
//TODO自动生成的方法存根
如果(isInputValid(etInput)){
add(0,etInput.getText().toString());
setText(“”);
itemAdapter.notifyDataSetChanged();
}
}
受保护的布尔值isInputValid(EditText etInput2){
//TODO自动生成方法存根
如果(etInput2.getText().toString().trim().length()我认为您的逻辑有点混乱。例如,您在ListActivity中引用的视图在其布局中不存在:
lvItem = (ListView)this.findViewById(R.id.listView_items);
listView\u items
在first.xml布局中定义,这意味着ListActivity中的lvItem
引用将为空
无论如何,这里有一个更好的方法来设计你的应用:
1-让您的MainActivity作为应用程序的核心组件。由于它显示listView,它还应负责从中添加/删除项目。当用户希望向列表中添加新项目时,MainActivity将启动ListActivity。
2-让您的ListActivity充当一个简单的界面来获取用户信息,并将其重新调整到MainActivity
在这种情况下,解决方案是使用。下面是一个小的重写,以使其正常工作:
公共类MainActivity扩展了活动{
private ListView lvItem;
private ArrayList<String> itemArrey;
private ArrayAdapter<String> itemAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.first);
Button but = (Button) findViewById(R.id.but);
lvItem = (ListView)this.findViewById(R.id.listView_items);
itemArrey = new ArrayList<String>();
itemArrey.clear();
itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,itemArrey);
lvItem.setAdapter(itemAdapter);
but.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ListActivity.class);
startActivityForResult(intent, 1);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
String result=data.getStringExtra("result");
itemArrey.add(0,result);
itemAdapter.notifyDataSetChanged();
}
else if (resultCode == RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
}
显然,您需要添加输入验证和其他细节。首先,您不能这样做
lvItem = (ListView)this.findViewById(R.id.listView_items);
当lvItem用作listView时,您将获得空指针异常。活动主布局中不存在项目
使您的设计工作正常的正确方法是按照您为setResult创建的意图,将“itemArrey”作为bundle extra发送回去
private ListView lvItem;
private ArrayList<String> itemArrey;
private ArrayAdapter<String> itemAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.first);
Button but = (Button) findViewById(R.id.but);
lvItem = (ListView)this.findViewById(R.id.listView_items);
itemArrey = new ArrayList<String>();
itemArrey.clear();
itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,itemArrey);
lvItem.setAdapter(itemAdapter);
but.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ListActivity.class);
startActivityForResult(intent, 1);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
String result=data.getStringExtra("result");
itemArrey.add(0,result);
itemAdapter.notifyDataSetChanged();
}
else if (resultCode == RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
}
Intent returnIntent = new Intent();
returnIntent.putExtra("result",etInput);
setResult(RESULT_OK,returnIntent);
finish();
lvItem = (ListView)this.findViewById(R.id.listView_items);