从按钮更新自定义列表视图

时间:2015-05-27 09:58:09

标签: android android-listview custom-controls

我有一个自定义行项xml和一个Activity xml,它有一个按钮,一个文本框和一个列表视图。谁能给我一个关于如何做到的一个非常简单的例子?我知道我需要一个适配器(我不知道它扩展了什么)并从按钮

更新它

我尝试使用editview文本从按钮更新列表视图,但无法获取适配器代码。我现在正在寻找基础适配器,但是无法帮助,但感觉这不应该很复杂,需要这么多覆盖方法。

活动类

public class InvitePlayers_Activity extends Activity {
    ListViewAdapter emailAdapter = null;
    ImageView imgView_mail;
    ImageView imgView_confirm;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE); //remove title bar
        setContentView(R.layout.activity_inviteplayers);

        //Generate list View from ArrayList
        displayListView();
    }

    private void displayListView() {
        //assign controls
        final ListView listView = (ListView) findViewById(R.id.listView_invitePlayers);
        imgView_mail = (ImageView)findViewById(R.id.imgView_mail);

        //Test data
        ArrayList<String> inviteNew = new ArrayList<String>();
        final ArrayList<ArrayList<String>> inviteList = new ArrayList<ArrayList<String>>();

        emailAdapter = new ListViewAdapter(this,inviteList);
        listView.setAdapter(emailAdapter);

        // Assign adapter to ListView
        listView.setTextFilterEnabled(true);

        //Edit listeners
        imgView_mail.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view)
            {
                        //variables
                        final String enteredMail = "testListViewEntry";
                        final ArrayList<ArrayList<String>> inviteList = new ArrayList<ArrayList<String>>();
                        ArrayList<String> invite = new ArrayList<String>();
                        invite.add(0, enteredMail);//add first email
                        invite.add(1,"icon_invitestatussent.png"); //add first status icon
                        inviteList.add(invite);
                        emailAdapter.notifyDataSetChanged();
                        listView.setAdapter(emailAdapter);
            }
        });
    }
}

适配器类

public class ListViewAdapter extends BaseAdapter {
    private Activity context;
    ArrayList<ArrayList<String>> inviteDetails = new ArrayList<ArrayList<String>>();
    public ListViewAdapter(Activity context, ArrayList<ArrayList<String>> inviteDetails ) {
        this.inviteDetails = inviteDetails;
        this.context = context;
    }

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    public View getView(int position, View view, ViewGroup parent){
        //Inflater
        LayoutInflater inflater = context.getLayoutInflater();

        //get row view
        if (view == null) {
            LayoutInflater mInflater = (LayoutInflater)
                    context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

            view = mInflater.inflate(R.layout.list_item_email, null);
        }

        //assign controls
        final TextView textView_playerEmail = (TextView) view.findViewById(R.id.textView_playerEmail);
        ImageView imgView_inviteStatus = (ImageView) view.findViewById(R.id.imgView_inviteStatus);

        //Assign control values that are dynamic
        textView_playerEmail.setText(inviteDetails.get(position).get(0));
        imgView_inviteStatus.setImageResource(R.drawable.icon_invitestatussent);

        return view;
    }

    public ArrayList<ArrayList<String>> addInvite(ArrayList<String> inviteDetails, ArrayList<ArrayList<String>> currentInvites)
    {
        currentInvites.add(inviteDetails);
        return currentInvites;

    }

    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }
}

自定义行xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp"
    android:id="@+id/textView_playerEmail"
    android:textColor="@color/white"
    android:text="item1">
</TextView>

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imgView_inviteStatus" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imgView_remove"
    android:src="@drawable/btn_cancel" />

活动布局        

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:weightSum="1"
            android:gravity="left|center">


            <ImageView
                android:layout_width="45dp"
                android:layout_height="34dp"
                android:id="@+id/imgView_mail"
                android:src="@drawable/btn_mail"
                android:layout_weight="0.22"
                android:padding="3dp" />
        </LinearLayout>

        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/listView_invitePlayers"
            android:layout_gravity="center_horizontal" />
    </LinearLayout>

    <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:id="@+id/btn_confirm"
        android:src="@drawable/btn_confirm"
        android:clickable="false"
        android:adjustViewBounds="true"
        android:layout_gravity="center_horizontal"
        android:padding="2dp"
        android:layout_weight="1" />
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

通过阅读问题的描述,我认为您需要设置自定义适配器以显示listview中的元素。这是为listview设置自定义适配器的方法:

public class Notes_list extends BaseAdapter
{
    private Context mContext;
    private ArrayList<String> id;
    private ArrayList<String> firstName;
    private ArrayList<String> lastName;

    public Notes_list(Context c, ArrayList<String> id,ArrayList<String> fname,  ArrayList<String> lname)
    {
        this.mContext = c;

        this.id = id;
        this.firstName = fname;
        this.lastName = lname;
    }

    public int getCount() {
        return id.size();
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

@Override
public View getView(int pos, View child, ViewGroup arg2) {
    Holder mHolder;

    LayoutInflater layoutInflater;
    if (child == null) {
        layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        child = layoutInflater.inflate(R.layout.custom_row, null);

        mHolder = new Holder();
    //  mHolder.txt_id = (TextView) child.findViewById(R.id.txt_id);
        mHolder.txt_fName = (TextView) child.findViewById(R.id.txt_fName);
        mHolder.txt_lName = (TextView) child.findViewById(R.id.txt_lName);
        child.setTag(mHolder);
    } else 
    {
        mHolder = (Holder) child.getTag();
    }

//  mHolder.txt_id.setText(id.get(pos));
    mHolder.txt_fName.setText(firstName.get(pos));
    mHolder.txt_lName.setText(lastName.get(pos));

    return child;
}

public class Holder 
{
//  TextView txt_id;
    TextView txt_fName;
    TextView txt_lName;
}
 }

现在在您必须调用列表的主要活动中输入如下代码:

private ListView userList;
private ArrayList<Employee> itemsList = new ArrayList<modelName>(); 
userList = (ListView) findViewById(R.id.List);
UserList disadpt = new UserList(MainActivity.this, itemsList);
userList.setAdapter(disadpt);

希望它有所帮助...