Android 列表视图和按钮

Android 列表视图和按钮,android,listview,button,Android,Listview,Button,我设法创建了我的ListView,其中有大约10个项目,但那不过是一个列表而已。我正在考虑添加更多功能,但我不知道如何添加。我需要添加按钮旁边的每一个项目,这将被称为“查看更多”,然后一些更多的信息将显示有关该项目的点击。有人知道怎么做吗?在提问之前,请访问此页面,熟悉人们提问的方式链接: 我为你制作了一个简单的应用程序,它有一个包含五个项目的列表,每个项目都有一个名为“查看更多”的按钮。当用户触摸该按钮时,说明将在警报对话框中弹出 对于布局,我们有一个主布局,simpley只有一个listv

我设法创建了我的ListView,其中有大约10个项目,但那不过是一个列表而已。我正在考虑添加更多功能,但我不知道如何添加。我需要添加按钮旁边的每一个项目,这将被称为“查看更多”,然后一些更多的信息将显示有关该项目的点击。有人知道怎么做吗?

在提问之前,请访问此页面,熟悉人们提问的方式

链接:


我为你制作了一个简单的应用程序,它有一个包含五个项目的列表,每个项目都有一个名为“查看更多”的按钮。当用户触摸该按钮时,说明将在警报对话框中弹出

对于布局,我们有一个主布局,simpley只有一个listview,没有其他内容。

<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=".MainActivity" >

    <ListView
        android:id="@+id/listView_MainItems"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

</RelativeLayout>
ArrayAdapter类代码:

public class MyListAdapter extends ArrayAdapter<ListProperty> {

    private static List<ListProperty> Items;
    private Activity context;
    private LayoutInflater l_inflater;

    public MyListAdapter(Activity context, int textViewResourceId,
            List<ListProperty> Items) {
        super(context, R.id.listView_MainItems, textViewResourceId, Items);
        this.context = context;
        this.Items = Items;
    }

    private class ViewHolder {
        TextView txtTitle;
        Button btnViewMore;
    }

    public ListProperty getItem(int position) {
        return Items.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        LayoutInflater inflater = context.getLayoutInflater();

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_main, null);
            holder = new ViewHolder();

            holder.txtTitle = (TextView) convertView
                    .findViewById(R.id.txtItemTitle);
            holder.btnViewMore = (Button) convertView
                    .findViewById(R.id.btnViewMore);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        final ListProperty property = (ListProperty) getItem(position);
        holder.txtTitle.setText(property.getTitle());

        holder.btnViewMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder msgBuilder = new Builder(context);
                msgBuilder.setTitle(property.getTitle());
                msgBuilder.setCancelable(false);
                msgBuilder.setMessage(property.getDesc());
                msgBuilder.setPositiveButton("Return", new OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
                AlertDialog alertRING = msgBuilder.create();
                alertRING.show();
            }
        });

        return convertView;
    }
}
公共类MyListAdapter扩展了ArrayAdapter{
私有静态列表项;
私人活动语境;
私人充气机;
公共MyListAdapter(活动上下文,int textViewResourceId,
(列表项目){
super(context,R.id.listView\u main项目,textViewResourceId,项目);
this.context=上下文;
这个。项目=项目;
}
私有类视窗持有者{
TextView-txtTitle;
按钮btnViewMore;
}
public ListProperty getItem(int位置){
返回项目。获取(位置);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终持票人;
LayoutInflater充气器=上下文。getLayoutInflater();
if(convertView==null){
convertView=充气机。充气(R.layout.list_main,空);
holder=新的ViewHolder();
holder.txtTitle=(TextView)convertView
.findviewbyd(R.id.txtitle);
holder.btnViewMore=(按钮)convertView
.findViewById(R.id.btnViewMore);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
最终ListProperty属性=(ListProperty)getItem(位置);
holder.txtitle.setText(property.getTitle());
holder.btnViewMore.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
AlertDialog.Builder msgBuilder=新生成器(上下文);
msgBuilder.setTitle(property.getTitle());
msgBuilder.setCancelable(false);
msgBuilder.setMessage(property.getDesc());
msgBuilder.setPositiveButton(“Return”,newonClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
}
});
AlertDialog alertRING=msgBuilder.create();
alertRING.show();
}
});
返回视图;
}
}

我希望您得到了想要的。

是否要在每个列表项中添加更多按钮?不需要添加任何按钮来显示该项的详细信息。只需处理onListItemClick()即可。选中此链接-如果需要自定义列表并在其中定义自己的UI,则可以实现自定义适配器类并将其与列表关联。有很多教程可以指导你完成这一过程。嘿,谢谢你的建议和你的辛勤工作,但我发现我可以点击你的onlistitemclick听众,从他们的位置我只是在创造新的活动。先生,你认为哪种方式更好?我很高兴我能帮上忙。如果你确切知道列表中有哪些项目,并且有特定数量的项目,那么只有列表项ClickListener可以完成这项工作,但是如果你想对列表有更多的控制权,而你不知道列表项的内容可能是什么,那么你必须制作自己的阵列来适应嘿,谢谢你的回复,我的列表中有10个特定的项目,我现在要做的是,每当单击一个项目时,我都会得到该项目的位置,我会开始一个新的活动来显示该项目的一些信息。非常感谢你的帮助。
public class MainActivity extends Activity {

    private ListView lstMainItems;

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

        lstMainItems = (ListView) findViewById(R.id.listView_MainItems);
        fillList();
    }

    // This functions fills the list
    private void fillList() {
        ArrayList<ListProperty> ItemHolder = new ArrayList<ListProperty>();

        ListProperty item0 = new ListProperty();
        ListProperty item1 = new ListProperty();
        ListProperty item2 = new ListProperty();
        ListProperty item3 = new ListProperty();
        ListProperty item4 = new ListProperty();

        item0.setTitle("Item 1");
        item0.setDesc("(1) some description places here...");

        item1.setTitle("Item 2");
        item1.setDesc("(2) some description places here...");

        item2.setTitle("Item 3");
        item2.setDesc("(3) some description places here...");

        item3.setTitle("Item 4");
        item3.setDesc("(4) some description places here...");

        item4.setTitle("Item 5");
        item4.setDesc("(5) some description places here...");

        ItemHolder.add(item0);
        ItemHolder.add(item1);
        ItemHolder.add(item2);
        ItemHolder.add(item3);
        ItemHolder.add(item4);

        MyListAdapter adapter = new MyListAdapter(MainActivity.this,
                R.layout.list_main, ItemHolder);
        lstMainItems.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
public class ListProperty {

    // Getting and Setting Item Title
    public void setTitle(String itemTitle) {
        this.itemTitle = itemTitle;
    }

    // Getting Item Title
    public String getTitle() {
        return itemTitle;
    }

    // Setting Item Description
    public void setDesc(String itemDesc) {
        this.itemDesc = itemDesc;
    }

    // Getting Item Description
    public String getDesc() {
        return itemDesc;
    }

    // Defining Variables
    private String itemTitle;
    private String itemDesc;
}
public class MyListAdapter extends ArrayAdapter<ListProperty> {

    private static List<ListProperty> Items;
    private Activity context;
    private LayoutInflater l_inflater;

    public MyListAdapter(Activity context, int textViewResourceId,
            List<ListProperty> Items) {
        super(context, R.id.listView_MainItems, textViewResourceId, Items);
        this.context = context;
        this.Items = Items;
    }

    private class ViewHolder {
        TextView txtTitle;
        Button btnViewMore;
    }

    public ListProperty getItem(int position) {
        return Items.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        LayoutInflater inflater = context.getLayoutInflater();

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_main, null);
            holder = new ViewHolder();

            holder.txtTitle = (TextView) convertView
                    .findViewById(R.id.txtItemTitle);
            holder.btnViewMore = (Button) convertView
                    .findViewById(R.id.btnViewMore);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        final ListProperty property = (ListProperty) getItem(position);
        holder.txtTitle.setText(property.getTitle());

        holder.btnViewMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder msgBuilder = new Builder(context);
                msgBuilder.setTitle(property.getTitle());
                msgBuilder.setCancelable(false);
                msgBuilder.setMessage(property.getDesc());
                msgBuilder.setPositiveButton("Return", new OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
                AlertDialog alertRING = msgBuilder.create();
                alertRING.show();
            }
        });

        return convertView;
    }
}