java - Android编程——带按钮的ListView

标签 java android xml layout

我正在创建此布局,其中显示文本列表,每个项目旁边都有一个“删除”按钮。我猜我无法正确布局。我可以得到一些帮助吗?

这是 ListView 的布局文件:

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



    <ListView
        android:id="@+id/locationList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/delete"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="#FFFFFFFF"
            android:text="Delete"
            android:onClick="onClickDelete"/>

    </ListView>

</RelativeLayout>

这是Java代码:

package com.android.ict.seneca.androidpocketguide;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class Websites extends Activity
        implements AdapterView.OnItemClickListener{

    private final String CLASS_NAME = "Websites";

    DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
    String date;
    String location;
    String name;
    int counter;
    List listName;

    private SharedPreferences savedState;

    private ListView listView;
    private List<RowItem> rowItems;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_websites);
        listName= new ArrayList();
        String app_name = "//sdcard//LocoLog.txt";
        //int counter = 0, flag = 0;
        String temp = "";
        savedState = getSharedPreferences( "quantitySaved", MODE_PRIVATE );
        rowItems = new ArrayList<RowItem>();
        counter = savedState.getInt("counter", -1 );
        if(counter!=-1)
        {
            for (int i = 1; i <= counter; i++)
            {
                String na;
                String da;
                String lo;
                na = "name" + i;
                da = "date" + i;
                lo = "location" + i;

                name = savedState.getString(na, "na" );
                date = savedState.getString(da, "da" );
                location = savedState.getString(lo, "lo" );

                //Toast.makeText(this, "The data: "+name + " " + location + " " + date,Toast.LENGTH_LONG).show();
                listName.add(new RowItem(name, location, date, counter));
            }
        }
        else
        {
            Toast.makeText(this, "No locations saved yet",Toast.LENGTH_LONG).show();
        }

        listView = (ListView) findViewById(R.id.locationList);
        listView.setAdapter( new CustomListAdapter(this, R.layout.list_item, listName ) );
        listView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        String cities = String.valueOf(parent.getItemAtPosition(position));
        Toast.makeText(this, cities, Toast.LENGTH_LONG).show();
        Intent myIntent = new Intent(view.getContext(), SingleListItem.class);
        myIntent.putExtra("product", cities);
        startActivityForResult(myIntent, 0);
    }
    public void onClickDelete(View view)
    {
        //String cities = String.valueOf(parent.getItemAtPosition(position));
        Toast.makeText(this, "delete ", Toast.LENGTH_LONG).show();
        //rowItems.remove(position);
    }

    public void onClickAdd(View view)
    {
        Toast.makeText(this, "add ", Toast.LENGTH_LONG).show();

    }

    public void onStart() {
        super.onStart();
        Log.d(CLASS_NAME, "onStart invoked!");
    }

    public void onPause() {
        super.onPause();
        Log.d(CLASS_NAME, "onPause invoked!!");
    }

    public void onResume() {
        super.onResume();
        Log.d(CLASS_NAME, "onResume invoked!!");
    }

    public void onStop() {
        super.onStop();
        Log.d(CLASS_NAME, "onStop invoked!!!");
    }

    public void onDestroy() {
        super.onDestroy();
        Log.d(CLASS_NAME, "onDestroy INVOKED!!!");
    }

    public void onRestart() {
        super.onRestart();
        Log.d(CLASS_NAME, "onRestart invoked!!");
    }

}

最佳答案

你不能在 ListView 中添加这样的按钮。你的按钮应该在单独的布局中。

mainLayout.xml

<ListView
    android:id="@+id/locationList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

和您的 ListView 项目布局,即您案例中的按钮 按钮.xml

<Button
    android:id="@+id/delete"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#FFFFFFFF"
    android:text="Delete"
    android:onClick="onClickDelete"/>

然后在您的 Activity 中

listview.setAdapter(YourAdapter());

然后在您的适配器的 getView 方法中()

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolderItem viewHolder;
    if(convertView==null){
       LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
       convertView = inflater.inflate(R.layout.buttons, parent, false);
       viewHolder = new ViewHolderItem();
       viewHolder.button = convertView.findViewById(R.id.button);
       convertView.setTag(viewHolder);
     }else{ 
       viewHolder = (ViewHolderItem) convertView.getTag();
     }

     viewHolder.button.setOnClickListener(new View.onClickListener(){
         public void onClick(){
         //handle your on click.
         }
    });

   return convertView;
}

Viewholder类

static class ViewHolderItem{
    private Button button;
}

阅读此了解更多信息 http://www.androidhive.info/2011/10/android-listview-tutorial

关于java - Android编程——带按钮的ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40565131/

相关文章:

Java:在正则表达式中组合 "not"子句

android - Robolectric 等待网络响应

c# - 使用命名空间和多个嵌套元素反序列化 XML

xml - phpunit 测试 xml 输出

python - 如何在没有 python 中的整个文件的情况下有效地检测 XML 模式

java - 如何在使用 Java 邮件发送 html 电子邮件时嵌入多个图像

java - 水的状态 - 摄氏度和华氏度 Java

java - 控制 Moxy 如何以通用方式序列化和反序列化枚举

android - 无法下载 gradle.jar

Android后台服务与任务队列