簡體   English   中英

Android動態列表視圖

[英]Android Dynamic List View

我想在布局頂部固定一個按鈕,然后在該按鈕的正下方創建一個動態編輯文本。 我正在創建自己的適配器。 在按鈕上單擊,另一個活動開始並返回字符串,該字符串將顯示在按鈕下方的列表視圖項目中。 我怎樣才能做到這一點 ?

我的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;
            }





    }

我不想為每個編輯文本都增加按鈕。

//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;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM