【问题标题】:show/hide button when focus the list item in android listview在android listview中聚焦列表项时显示/隐藏按钮
【发布时间】:2014-02-20 06:21:49
【问题描述】:

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

在具有 2 个按钮和一个文本视图的列表项中。

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

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

 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));

【问题讨论】:

  • 表示单击列表项后要显示编辑/删除按钮??
  • 使用带有编辑和删除按钮的上下文操作栏
  • 我想单独显示当前选中的项目需要显示编辑/删除按钮?

标签: android show-hide android-button listadapter


【解决方案1】:

我用下面的代码和它的工作进行了测试,你可以检查你的要求。 notifyDataSetChanged() 方法用于告诉适配器 arraylist 值已更改,因此请重新加载列表,这样现在我们得到了选定的项目,我们将其 VISIBLE 状态保持为 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;
    }

}

}

主 Activity 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>

【讨论】:

  • 这意味着:现在,如果我从该列表中选择了任何项目,则意味着它正在显示编辑/删除按钮。之后,我从列表中选择了任何其他项目意味着该项目还显示了编辑/删除按钮,而之前选择的项目也显示了编辑/删除按钮。但我想显示当前选定的项目只需要显示编辑/删除按钮?
  • @user2218667 我已经更新了答案,所以现在你可以检查一下你的要求了。
【解决方案2】:

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

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);

            }

        });

【讨论】:

    【解决方案3】:

    在您的 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);
        }
    

    【讨论】:

    • 另外注意View view和parent.getChildAt(position);
    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2012-06-12
    • 1970-01-01
    • 2015-02-15
    • 2013-01-12
    • 1970-01-01
    相关资源
    最近更新 更多