将列表项集中在android listview中时显示/隐藏按钮

时间:2014-02-20 06:21:50

标签: android show-hide android-button listadapter

我的列表视图中列出了许多列表项。

在该列表项中有2个按钮和一个textview。

我在这里使用以下代码。现在我的列表显示编辑/删除按钮。如果我必须关注哪个列表项意味着单独的项目必须显示编辑/删除按钮。其他列表项不需要显示编辑/删除按钮。

我该怎么办?请检查一下并给我一个实现这部分的想法吗?

 stafflist.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View view, int position,
                    long arg3) {
                // TODO Auto-generated method stub

                    Button bPrevious = (Button)view.findViewById(R.id.view_staff);
                    bPrevious.setVisibility(View.VISIBLE);

                Button bPlaying = (Button)view.findViewById(R.id.delete_staff);
                bPlaying.setVisibility(View.VISIBLE);
            }
        });

现在,如果我从该列表中选择了任何项目,则意味着它显示了编辑/删除按钮。之后,我从列表中选择了任何其他项目,表示该项目还显示编辑/删除按钮,此前选择的项目也显示编辑/删除按钮。

但我想显示当前所选项目只需要显示编辑/删除按钮?

 public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.manager_list_staff, null);
    TextView staffname = (TextView)vi.findViewById(R.id.my_staffname);
    TextView staff_empcode = (TextView)vi.findViewById(R.id.my_staffempcode);
    LinearLayout editdelete = (LinearLayout)vi.findViewById(R.id.edit_delete);
    final Button edit_staff = (Button)vi.findViewById(R.id.view_staff); 
    final Button delete_staff = (Button)vi.findViewById(R.id.delete_staff);
    HashMap<String, String> Order = new HashMap<String, String>();
    Order = data.get(position);
    int temp = parent.getId()+1;
    staff_id.setText(Order.get(Manager_List_Staff.TAG_STAFF_ID));

3 个答案:

答案 0 :(得分:0)

我使用以下代码及其工作进行测试,您可以检查您的要求。 notifyDataSetChanged()方法用于告诉适配器arraylist值已更改,因此请重新加载列表,因此现在我们获得了所选项目,我们将其可见状态设置为true,其他状态保持为GONE。

<强> MainActivity

package com.example.test;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnItemClickListener
{

ListView listview;
testAdapter adp;
ArrayList<String> testvalues=new ArrayList<String>();
public static int selectedValue=-1;

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

    listview=(ListView) findViewById(R.id.listView1);       

    testvalues.add("India");
    testvalues.add("USA");
    testvalues.add("Australia");

    listview.setOnItemClickListener(this);
    adp=new testAdapter();

    listview.setAdapter(adp);
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
{
    Button bPrevious = (Button)arg1.findViewById(R.id.button1);
    bPrevious.setVisibility(View.VISIBLE);

    Button bPlaying = (Button)arg1.findViewById(R.id.button2);
    bPlaying.setVisibility(View.VISIBLE);

    selectedValue=arg2;
    adp.notifyDataSetChanged();
}

class testAdapter extends BaseAdapter
{           
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return testvalues.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return testvalues.get(arg0);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.testing, null);
        TextView staffname = (TextView)vi.findViewById(R.id.textView1);        

        final Button edit_staff = (Button)vi.findViewById(R.id.button1); 
        final Button delete_staff = (Button)vi.findViewById(R.id.button2);

        staffname.setText(testvalues.get(position));
        if(selectedValue==position && selectedValue!=-1)
        {
            edit_staff.setVisibility(View.VISIBLE);
            delete_staff.setVisibility(View.VISIBLE);
        }
        else
        {
            edit_staff.setVisibility(View.GONE);
            delete_staff.setVisibility(View.GONE);
        }

        return vi;
    }

}

}

主要活动XML布局文件(activity_main.xml)

<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/listView1"
    android:layout_width="match_parent"
    android:layout_height="500dp" >
</ListView>

</RelativeLayout>

扩充XML布局文件(testing.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="horizontal" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button1" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button2" />

</LinearLayout>

答案 1 :(得分:0)

使用成员变量存储按钮。就我而言,我使用布局显示一些文本和按钮。所以我改变了列表项内部布局的视图。

View hiddenLayout;

将侦听器附加到listView。在隐藏视图/布局之前,请验证它是否可见。

myList.setOnItemClickListener(new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                if(hiddenLayout != null && hiddenLayout.getVisibility() == View.VISIBLE)
                    hiddenLayout.setVisibility(View.GONE);

                hiddenLayout = view.findViewById(R.id.myTripBbuttonLayout);
                hiddenLayout.setVisibility(View.VISIBLE);

            }

        });

答案 2 :(得分:0)

在onClickItem监听器中,您需要定义并找到您的按钮。这是一个例子:

        @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        int btnStart = R.id.btnStart;
        int btnDelete = R.id.btnDelete;
        //here set all button in item invisible
        for (int i = 0; i < parent.getChildCount(); i++) {
            parent.getChildAt(i).findViewById(btnStart).setVisibility(View.INVISIBLE);
            parent.getChildAt(i).findViewById(btnDelete).setVisibility(View.INVISIBLE);
            parent.getChildAt(i).setBackgroundColor(Color.TRANSPARENT);
        }

        //but here we set for selected item buttons visible, and change background        view.setBackgroundColor(getResources().getColor(R.color.color_selected_nav_drawer));
        view.findViewById(btnStart).setVisibility(View.VISIBLE);
        view.findViewById(btnDelete).setVisibility(View.VISIBLE);
    }