2014-02-20 1 views
0

Многие элементы списка перечислены в моем списке.показать/скрыть кнопку, когда фокус элемент списка в android listview

В этом элементе списка есть 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)); 
+0

означает, что после нажатия на элемент списка вы хотите отобразить кнопку редактирования/удаления? –

+0

Использование контекстной панели действий с кнопкой редактирования и удаления –

+0

Я хочу показать только выбранный элемент, нужно показать кнопку редактирования/удаления? – user2218667

ответ

0

Я проверил с приведенным ниже кодом и его работой, вы можете проверить его требования. Метод 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; 
    } 

} 

} 

Основная деятельность XML Layout File (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 Layout File (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> 
+0

это означает: теперь, если я выбрал любой элемент из этого списка, значит, он показывает кнопку редактирования/удаления. после этого я выбрал любой другой элемент из списка, это означает, что элемент также показывает кнопку редактирования/удаления с этим предыдущим выбранным элементом, также показывающим кнопку редактирования/удаления. Но я хочу показать текущий выбранный элемент, только нужно показать кнопку редактирования/удаления? – user2218667

+0

Позвольте мне проверить и поместить код. – Ajeesh

+0

@ user2218667 Я обновил ответ, так что теперь вы можете проверить свое требование. – Ajeesh

0

Используйте переменную-член для сохранения кнопки. В моем случае я использую Layout для отображения некоторого текста вместе с кнопкой. Поэтому я изменяю представление внутреннего макета элемента списка.

View hiddenLayout; 

Прикрепить слушателя к спискуView. Прежде чем скрывать представление/макет, проверьте, видимо ли оно или нет.

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

      } 

     }); 
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); 
    } 
+0

Также обратите внимание, что вид вида аналогичен parent.getChildAt (position); – msamardzic