我的列表视图中列出了许多列表项。
在该列表项中有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));
答案 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);
}