2016-11-03 12 views
0

Ну, я пытаюсь объяснить. Я сделал приложение, в котором у меня есть список, в котором каждая строка имеет также две кнопки (я сделал это с другим вопросом, размещенным на этом сайте). Проблема заключается в следующем: Две кнопки - это «старт» и «остановка». Когда я нажимаю кнопку «Пуск», запускается служба, и когда я нажимаю кнопку «Стоп», эта служба должна останавливаться (я еще не реализовал эту услугу). Итак, когда я нажимаю кнопку «Пуск», я хотел бы скрыть кнопку «Пуск», таким образом, я знаю, что служба запущена. Как я могу это сделать? Кроме того, это может быть правильный выбор, реализующий сервис таким образом? Я выбрал эту идею, потому что мне нужно остановить службу, когда я решил остановить ее.Listview и кнопка скрыта

Код:

MainActivity.java

public class MainActivity extends AppCompatActivity { 

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

     //generate list 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add("item1"); 
     list.add("item2"); 

     //instantiate custom adapter 
     android.widget.ListAdapter adapter = new ListAdapter(this,0,list); 

     //handle listview and assign adapter 
     ListView lView = (ListView)findViewById(R.id.list_item); 
     lView.setAdapter(adapter); 
    } 


} 

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    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="com.example.sara.myapplication.MainActivity"> 


    <ListView 
     android:id="@+id/list_item" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" /> 
</RelativeLayout> 

row_item.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"> 

    <TextView 
     android:text="Text" 
     android:id="@+id/list_item_string" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5pt" 
     android:layout_marginTop="2pt" 
     android:textSize="10pt" 
     android:layout_weight="0.49"/> 


    <Button 
     android:text="Start" 
     android:id="@+id/start_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:text="Stop" 
     android:id="@+id/stop_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toEndOf="@+id/start_button"/> 

</LinearLayout> 

ListAdapter.java

public class ListAdapter extends ArrayAdapter<String> { 

    private ArrayList<String> list; 
    private int layout; 
    private Context context; 

    public ListAdapter(Context context, int resource, ArrayList<String> objects) { 
     super(context, resource, objects); 
     context = context; 
     layout = resource; 
     list = objects; 
    } 


    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      view = inflater.inflate(R.layout.row_item, null); 
     } 

     //Handle TextView and display string from your list 
     TextView listItemText = (TextView)view.findViewById(R.id.list_item_string); 
     listItemText.setText(list.get(position)); 

     //Handle buttons and add onClickListeners 
     Button deleteBtn = (Button)view.findViewById(R.id.stop_button); 
     Button addBtn = (Button)view.findViewById(R.id.start_button); 

     deleteBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getContext(), "delete - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show(); 
       //do something 
       notifyDataSetChanged(); 
      } 
     }); 
     addBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getContext(), "start - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show(); 
       notifyDataSetChanged(); 
      } 
     }); 

     return view; 

    } 

} 
+0

использовать pojoclass поддерживать положение кнопки в и затем примените addBtn.setVisibility (View.Invisible) к вашей кнопке. – LoveAndroid

+1

Почему бы не использовать один текст кнопки, как ** Запустить **, когда служба остановлена, и ** Остановить **, когда служба была запущена (даже если она была остановлена ​​и даже когда она была запущена) может быть даже красным. Вероятно, вам нужно будет хранить текущее состояние где-нибудь или иметь какие-то средства для определения состояния службы (у вас могут быть одинаковые проблемы с двумя кнопками). – MikeT

+0

. Вы должны поддерживать статус каждой кнопки запуска в режиме просмотра списка, а затем вы можете сделать это легко. Спасибо –

ответ

-1

Вы должны использовать setVisible(false) метод Пример:

addBtn.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(getContext(), "start - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show(); 
      notifyDataSetChanged(); 
      addBtn.setVisible(false); // ← Hide the "Start button" 
     } 
    }); 
0

вы можете использовать некоторые логическое значение флага, чтобы изменить видимость кнопки на мыши.

-1

Чтобы скрыть кнопку запуска после нажатия,

addBtn.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(getContext(), "start - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show(); 
      notifyDataSetChanged(); 
     addBtn.setVisibility(View.GONE); 
     } 
    }); 
+0

Я добавил «setVisibility» – AngelSara

+0

, он работает тогда? –

+0

Да, так кажется – AngelSara

0

Если в вашем списке у вас есть более чем один элемент, то вы должны реализовать пользовательский адаптер и создать специальный для каждого у слушателя элемента. Используйте setTag и getTag. CHANGE row_item.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"> 

    <TextView 
     android:text="Text" 
     android:id="@+id/list_item_string" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5pt" 
     android:layout_marginTop="2pt" 
     android:textSize="10pt" 
     android:layout_weight="0.49"/> 


    <Button 
     android:text="Start" 
     android:id="@+id/start_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="start"/> 

    <Button 
     android:text="Stop" 
     android:id="@+id/stop_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toEndOf="@+id/start_button" 
     android:onClick="stop" 
     android:layout_marginLeft="10dp" 
     android:layout_toRightOf="@+id/start_button" /> 

</LinearLayout> 

И MainAcitivty

public class MainActivity extends AppCompatActivity { 

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

     //generate list 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add("item1"); 
     list.add("item2"); 

     //instantiate custom adapter 
     ListAdapter adapter = new ListAdapter(this, 0, list); 

     //handle listview and assign adapter 
     ListView lView = (ListView)findViewById(R.id.list_item); 
     lView.setAdapter(adapter); 
    } 

    public void start(View v){ 
     Button b = (Button) v; 
     v.setVisibility(View.INVISIBLE); 
    } 

    public void stop(View v){ 

    } 


} 

ListAdapter

public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      view = inflater.inflate(R.layout.row_item, null); 
     } 

     //Handle TextView and display string from your list 
     TextView listItemText = (TextView)view.findViewById(R.id.list_item_string); 
     listItemText.setText(list.get(position)); 

     //Handle buttons and add onClickListeners 
     Button deleteBtn = (Button)view.findViewById(R.id.stop_button); 
     Button addBtn = (Button)view.findViewById(R.id.start_button); 

     return view; 

    } 
0
addBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getContext(), "start - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show(); 
       //do something 
       addBtn.setVisibility(View.GONE); 
       notifyDataSetChanged(); 
      } 
     }); 

deleteBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getContext(), "delete - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show(); 
       //do something 
       addBtn.setVisibility(View.VISIBLE); 
       notifyDataSetChanged(); 
      } 
     }); 

Таким образом, кажется, работает

Смежные вопросы