Android: помогите создать контекстное меню из списка - PullRequest
2 голосов
/ 24 ноября 2010

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

 private ListView lvUsers;
 private ArrayList<UserBO> mListUsers;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.select);


        mListUsers = getUsers();
        lvUsers = (ListView) findViewById(R.id.lv_user);
        lvUsers.setAdapter(new ListAdapter(this, R.id.lv_user, mListUsers));                

    }

    public ArrayList<UserBO> getUsers(){          

  DBAdapter dbAdapter=DBAdapter.getDBAdapterInstance(this);
  try {
   dbAdapter.createDataBase();
  } catch (IOException e) {
   Log.i("*** select ",e.getMessage());
  }
     dbAdapter.openDataBase();  
  String query="SELECT * FROM user;";
  ArrayList<ArrayList<String>> stringList = dbAdapter.selectRecordsFromDBList(query, null);
  dbAdapter.close();

  ArrayList<UserBO> usersList = new ArrayList<UserBO>();
  for (int i = 0; i < stringList.size(); i++) {
   ArrayList<String> list = stringList.get(i);
   UserBO user = new UserBO();
   try {
    user.id = Integer.parseInt(list.get(0));
    user.name = list.get(1);
    user.age = list.get(2);
   } catch (Exception e) {
    Log.i("***" + Select.class.toString(), e.getMessage());
   }
   usersList.add(user);
  }
  return usersList;
 }

 // ***ListAdapter***
 private class ListAdapter extends ArrayAdapter<UserBO> {  // --CloneChangeRequired
  private ArrayList<UserBO> mList;  // --CloneChangeRequired
  private Context mContext;

  public ListAdapter(Context context, int textViewResourceId,ArrayList<UserBO> list) { // --CloneChangeRequired
   super(context, textViewResourceId, list);
   this.mList = list;
   this.mContext = context;
  }

  public View getView(int position, View convertView, ViewGroup parent){
   View view = convertView;
   try{
   if (view == null) {
    LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = vi.inflate(R.layout.list_item, null);  // --CloneChangeRequired(list_item)
   }
   final UserBO listItem = mList.get(position);  // --CloneChangeRequired    
   if (listItem != null) {
    // setting list_item views      
    ( (TextView) view.findViewById(R.id.tv_id) ).setText( listItem.getId()+"");
    ( (TextView) view.findViewById(R.id.tv_name) ).setText( listItem.getName() );
    ( (TextView) view.findViewById(R.id.tv_age) ).setText( listItem.getAge()+"" );

   }}catch(Exception e){
    Log.i(Select.ListAdapter.class.toString(), e.getMessage());    
   }
   return view;
  }

 }

Ответы [ 2 ]

4 голосов
/ 24 ноября 2010

Это должно сработать.Не забудьте: registerForContextMenu (lvUsers);

/** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.select);

        mListUsers = getUsers();
        lvUsers = (ListView) findViewById(R.id.lv_user);
        lvUsers.setAdapter(new ListAdapter(this, R.id.lv_user, mListUsers));  
        **registerForContextMenu(lvUsers);**      
        }

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
  super.onCreateContextMenu(menu, v, menuInfo);
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.context_menu, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
  AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
  switch (item.getItemId()) {
  case R.id.edit:
    editNote(info.id);
    return true;
  case R.id.delete:
    deleteNote(info.id);
    return true;
  default:
    return super.onContextItemSelected(item);
  }
}

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/edit"
          android:title="@string/edit" />
    <item android:id="@+id/delete"
          android:title="@string/delete" />
</menu>
1 голос
/ 24 ноября 2010

Вот пример, который может помочь вам с вашей второй проблемой.

MainActivity.class

 public class MainActivity extends Activity {
    TextView textView;
    Intent intent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Data to be passed
        final String data = "String to Pass";

        textView = (TextView) findViewById(R.id.text1);
        textView.setText(data);

        //Pass Data with Button
        final Button btn = (Button) findViewById(R.id.btn1);
          btn.setOnClickListener(new View.OnClickListener() {

              @Override
          public void onClick(View v) {

                intent = new Intent(v.getContext(), SecondActivity.class);
                intent.putExtra("sampleData", data);
                startActivity(intent);  
              }
         });
    }
}

SecondActivity.class

public class SecondActivity extends Activity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         //Get data from Intent
         Bundle extras = getIntent().getExtras();
         String data = extras.getString("sampleData");

         textView = new TextView(this);
         textView.setText("String: " + data);

         setContentView(textView);
    }

}

Не забудьте добавить свою активность в свой AndroidManifest.xml.

AndroidManifest.xml

<activity android:name=".SecondActivity"></activity>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...