Java Android动态列表视图

Java Android动态列表视图,java,android,android-layout,android-listview,android-adapter,Java,Android,Android Layout,Android Listview,Android Adapter,我想在布局顶部固定一个按钮,并在按钮下方创建一个动态编辑文本。我正在创建自己的适配器。单击按钮时,另一个活动开始并返回字符串,该字符串将显示在按钮下方的列表视图项上。我该怎么做 我的XML布局- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match

我想在布局顶部固定一个按钮,并在按钮下方创建一个动态编辑文本。我正在创建自己的适配器。单击按钮时,另一个活动开始并返回字符串,该字符串将显示在按钮下方的列表视图项上。我该怎么做

我的XML布局-

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

    <Button
        android:id="@+id/button1"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <EditText
        android:id="@+id/etList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >
    </EditText>

</LinearLayout>

我的列表视图适配器-

       package com.example.tasktable;

        import android.content.Context;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.ArrayAdapter;
        import android.widget.Button;
        import android.widget.TextView;

        public class TaskAdapter extends ArrayAdapter<String>  {
            private final Context context;
            private final String[] values;
            Button click;
            TextView textView;

            public TaskAdapter(Context context, String[] values) {
                super(context, R.layout.list_view, values);
                this.context = context;
                this.values = values;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                LayoutInflater inflator = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View rowView = inflator.inflate(R.layout.list_view, parent, false);
                click = (Button) rowView.findViewById(R.id.button1);
                textView = (TextView) rowView.findViewById(R.id.etList);

                textView.setText(values[position]);

                return rowView;
            }





    }
package com.example.tasktable;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.TextView;
公共类TaskAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终字符串[]值;
点击按钮;
文本视图文本视图;
公共TaskAdapter(上下文上下文,字符串[]值){
super(上下文、R.layout.list\u视图、值);
this.context=上下文;
这个值=值;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
视图行视图=充气机。充气(R.layout.list\u视图,父视图,false);
单击=(按钮)rowView.findViewById(R.id.button1);
textView=(textView)rowView.findViewById(R.id.etList);
setText(值[位置]);
返回行视图;
}
}

我不想用每个编辑文本膨胀按钮。

您可以用相对布局定位布局元素。

//试试这种方法,希望这能帮助您。。。
**XML**代码
**activity.xml**
**list_activity.xml**
**list_item.xml**
**活动**代码
**我的活动**
公共类MyActivity扩展了活动{
专用按钮btnAdd;
私人线路布局贷款;
私有最终整数获取列表项=1;
私有HashMap listItemMap;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
btnAdd=(按钮)findviewbyd(R.id.btnAdd);
lnrEdit=(LinearLayout)findViewById(R.id.lnrEdit);
listItemMap=新的HashMap();
btnAdd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent Intent=新的Intent(MyActivity.this、myListActivity.class);
startActivityForResult(意图、获取列表项);
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(resultCode==RESULT\u OK){
if(requestCode==获取列表项);
{
字符串getListValue=data.getStringExtra(“值”);
int index=data.getIntExtra(“index”,0);
if(listItemMap.containsKey(String.valueOf(index))){
Toast.makeText(此“此项目已拍摄!!!”,Toast.LENGTH\u LONG.show();
}否则{
listItemMap.put(String.valueOf(index),getListValue);
EditText EditText=新的EditText(本);
editText.setLayoutParams(新的ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_父项,ViewGroup.LayoutParams.WRAP_内容));
setId(索引);
setText(getListValue);
setTag(getListValue);
editText.setFocusable(false);
editText.setFocusableInTouchMode(false);
editText.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串值=v.getTag().toString();
Toast.makeText(MyActivity.this,value,Toast.LENGTH_SHORT).show();
}
});
lnrEdit.addView(编辑文本);
}
}
}
}
}
**抗糜烂活性**
公共类MyListActivity扩展了ListActivity{
私有字符串[]列表数组;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list_活动);
listArray=新字符串[]{“Android4.1”、“Android4.2”、“Android4.3”、“Android4.4”、“Android4.5”};
setListAdapter(新任务适配器(此为listArray));
}
类TaskAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终字符串[]值;
公共TaskAdapter(上下文上下文,字符串[]值){
super(上下文、R.layout.list_项、值);
this.context=上下文;
这个值=值;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
holder=新的ViewHolder();
convertView=LayoutFlater.from(上下文)。充气(R.layout.list_项,父项,false);
holder.button=(button)convertView.findViewById(R.id.btselect);
holder.textView=(textView)convertView.findViewById(R.id.txtValue);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.textView.setText(值[位置]);
holder.button.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//try this way, hope this will help you...

**XML** code

**activity.xml**
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add"/>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <LinearLayout
            android:id="@+id/lnrEdit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

        </LinearLayout>
    </ScrollView>
</LinearLayout>

**list_activity.xml**
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

**list_item.xml**
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:id="@+id/txtValue"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <Button
        android:id="@+id/btnSelect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Select"/>
</LinearLayout>

**ACTIVITY** code

**MyActivity**
public class MyActivity extends Activity{

    private Button btnAdd;
    private LinearLayout lnrEdit;
    private final int GET_LIST_ITEM = 1;
    private HashMap<String,String> listItemMap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);

        btnAdd = (Button) findViewById(R.id.btnAdd);
        lnrEdit = (LinearLayout) findViewById(R.id.lnrEdit);

        listItemMap = new HashMap<String, String>();
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MyActivity.this,MyListActivty.class);
                startActivityForResult(intent,GET_LIST_ITEM);
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == RESULT_OK){
            if(requestCode == GET_LIST_ITEM);
            {
              String getListValue = data.getStringExtra("value");
              int index = data.getIntExtra("index",0);
              if(listItemMap.containsKey(String.valueOf(index))){
                  Toast.makeText(this,"This item already taken !!!",Toast.LENGTH_LONG).show();
              }  else{
                  listItemMap.put(String.valueOf(index),getListValue);
                  EditText editText = new EditText(this);
                  editText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                  editText.setId(index);
                  editText.setText(getListValue);
                  editText.setTag(getListValue);
                  editText.setFocusable(false);
                  editText.setFocusableInTouchMode(false);
                  editText.setOnClickListener(new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                          String value = v.getTag().toString();
                          Toast.makeText(MyActivity.this,value,Toast.LENGTH_SHORT).show();
                      }
                  });

                  lnrEdit.addView(editText);
              }
            }
        }
    }
}

**MyListActivity**
public class MyListActivty extends ListActivity{

    private String[] listArray;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_activity);
        listArray = new String[]{"Android4.1","Android4.2","Android4.3","Android4.4","Android4.5"};
        setListAdapter(new TaskAdapter(this,listArray));
    }

    class TaskAdapter extends ArrayAdapter<String> {
        private final Context context;
        private final String[] values;

        public TaskAdapter(Context context, String[] values) {
            super(context, R.layout.list_item, values);
            this.context = context;
            this.values = values;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if(convertView==null){
                holder = new ViewHolder();
                convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
                holder.button = (Button) convertView.findViewById(R.id.btnSelect);
                holder.textView = (TextView) convertView.findViewById(R.id.txtValue);
                convertView.setTag(holder);
            } else{
                holder = (ViewHolder)convertView.getTag();
            }
            holder.textView.setText(values[position]);
            holder.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.putExtra("index",position);
                    intent.putExtra("value",values[position]);
                    setResult(RESULT_OK,intent);
                    finish();
                }
            });
            return convertView;
        }

        @Override
        public int getCount() {
            return values.length;
        }
    }

    static class ViewHolder{
        Button button;
        TextView textView;
    }

}