2014-01-22 4 views
1
.

. Я хочу показать контекстное меню (OnClickLong) с опцией удаления и редактирования в пользовательском списке, созданном мной с помощью адаптера пользовательского списка. я буду размещать кодСоздайте контекстное меню, когда нажмите «Длинные» в пользовательском ListView.

SpotListFragment

package com.pap.myspots.fragments; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import com.pap.myspots.R; 
import com.pap.myspots.R.layout; 
import com.pap.myspots.database.DBAdapter; 
import com.pap.myspots.listView.SpotList; 
import com.pap.myspots.listView.SpotListAdapter; 

import android.annotation.SuppressLint; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.ListFragment; 
import android.util.Log; 
import android.view.ContextMenu; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.view.LayoutInflater; 
import android.view.MenuInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemLongClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

public class SpotListFragment extends Fragment implements OnClickListener{ 

    String nome; 
    String local; 
    Button createToast; 
    List<String> nomes ; 
    List<String> locais ; 
    ListView listView; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_spotlist, container, false); 

     DBAdapter db = new DBAdapter(getActivity()); 
     db.open(); 
     Cursor cursor = db.getAllTitles(); 
     nomes = new ArrayList<String>(); 
     while(cursor.moveToNext()){ 
      String uname = cursor.getString(cursor.getColumnIndex("nome")); 
      nomes.add(uname); 
     } 

     Cursor cursor2 = db.getAllTitles(); 
     locais = new ArrayList<String>(); 
     while(cursor2.moveToNext()){ 
      String ulocal = cursor2.getString(cursor.getColumnIndex("local")); 
      locais.add(ulocal); 
     } 

     SpotListAdapter adapter = new SpotListAdapter(getActivity(), generateData()); 

     // 2. Get ListView from activity_main.xml 
     listView = (ListView) rootView.findViewById(R.id.spotList); 

     // 3. setListAdapter 
     listView.setAdapter(adapter); 

     return rootView; 

     } 

    private ArrayList<SpotList> generateData(){ 
     ArrayList<SpotList> items = new ArrayList<SpotList>(); 
     int i = 0; 
     while(nomes.size()>i){ 
      items.add(new SpotList(new String(nomes.get(i)),new String(locais.get(i)))); 
      i++; 
     } 
     return items; 
    } 


    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

    } 

    //Deleted individual cart items 



} 

SpotListAdapter

package com.pap.myspots.listView; 

import java.util.ArrayList; 

import com.pap.myspots.R; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class SpotListAdapter extends ArrayAdapter<SpotList> { 
    private final Context context; 
    private final ArrayList<SpotList> itemsArrayList; 

    public SpotListAdapter(Context context, ArrayList<SpotList> itemsArrayList) { 

     super(context, R.layout.list_row, itemsArrayList); 

     this.context = context; 
     this.itemsArrayList = itemsArrayList; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     // 1. Create inflater 
     LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     // 2. Get rowView from inflater 
     View rowView = inflater.inflate(R.layout.list_row, parent, false); 

     // 3. Get the two text view from the rowView 
     TextView labelView = (TextView) rowView.findViewById(R.id.title); 
     TextView valueView = (TextView) rowView.findViewById(R.id.place); 

     // 4. Set the text for textView 
     labelView.setText(itemsArrayList.get(position).getNome()); 
     valueView.setText(itemsArrayList.get(position).getLocal()); 

     // 5. retrn rowView 
     return rowView; 
    } 
} 

SpotList (бобы)

package com.pap.myspots.listView; 

public class SpotList { 

    public SpotList(String nome, String local) { 
     super(); 
     this.nome = nome; 
     this.local = local; 
    } 

    public String getNome() { 
     return nome; 
    } 

    public void setNome(String nome) { 
     this.nome = nome; 
    } 

    public String getLocal() { 
     return local; 
    } 

    public void setLocal(String local) { 
     this.local = local; 
    } 

    private String nome; 
    private String local; 


} 
+0

Вы не пробовали на создание контекстного меню? Пожалуйста, попробуйте, и если у вас возникнут какие-либо проблемы, тогда мы будем .help –

+0

Я могу его создать, проблема в том, что я не знаю, какой класс и метод плохо это делают ... –

ответ

6

Итак, прежде всего зарегистрировать ListView для контекстного меню в OnCreate метод:

registerForContextMenu(yourListView); 

Создание Контекстное по overridig в onCreateContextMenu:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
{ 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 
    _listPosition = info.position;  // Get Index of long-clicked item 

    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle("Choose Action"); // Context-menu title 
    menu.add(0, v.getId(), 0, "Edit"); // Add element "Edit" 
    menu.add(0, v.getId(), 1, "Delete");  // Add element "Delete" 
} 

Реагировать на щелчки в контекстном меню:

@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 
     if(item.getTitle() == "Edit") // "Edit" chosen 
     { 
     // Do stuff 
     } 
     else if(item.getTitle() == "Delete") // "Delete" chosen 
     { 
      // Do stuff 
     } 
     else 
     { 
     return false; 
     } 

     return true; 
} 
+1

+1, BTW, зависит от 'item.getTitle() == «Редактировать» (что может измениться в многоязычном приложении), а не на каком-то индексе/ключевом/теге, является хорошей идеей? – ZigiZ

0

Вам необходимо зарегистрировать свой пользовательский ListView в контекстном меню. Метод использования registerForContextMenu(listView);. Вызвать этот метод в onCreate

0

Я бы определил onLongClickListener в методе getView() вашего обложки ArrayList. Просто зарегистрируйте представление внутри прослушивателя длинных кликов, используя registerForContextView(convertView).

Теперь в вашем коде активность, просто определить контекстное меню, как вы бы в любом другом случае:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    ...  
    menu.setHeaderTitle(...); 
    menu.add(...); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    final int mId = item.getItemId(); 

    switch (mId) { 
    case 0: 
    ... 
    break; 

    default: 
    break; 
} 
1

В следующий раз просто потратить несколько минут и Google сами:

Override onCreateContextMenu() для создания меню и onContextItemSelected() обрабатывать событие щелчка

Вы также должны зарегистрировать ListView для контекстного меню. Вы можете сделать это в фрагменте onActivityCreated() метода:

registerForContextMenu(listView); 
0

Больше точность:

@Override 
     public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     TreeViewList v1=(TreeViewList) v; //my custom listview 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 
     final LinearLayout viewLayout = (LinearLayout) v1.getChildAt(info.position-v1.getFirstVisiblePosition());//if in list many items 
     final TextView descriptionView = (TextView) viewLayout 
       .findViewById(R.id.list_item_description); 
      menu.add(0, v.getId(), 0, descriptionView.getText()); 
      menu.add(0, v.getId(), 0, "Action 2"); 
     } 
Смежные вопросы