2010-11-23 7 views
2

이것은 수업입니다. 나는 longpress에 그것에 컨텍스트 메뉴를 추가하고 싶다. 그러나 초보자로서 나는 어려운 것을 안다. 도와주세요.Android : help listview에서 상황에 맞는 메뉴를 만듭니다.

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

} 
+1

에 오신 것을 환영합니다. 이전 질문으로 돌아가 정답으로 표시된 답변 중 하나를 표시해야합니다. –

+0

미안 Mayra. 내가 그걸 알았는지 몰랐다. 고마워요. – Riza

답변

4

이 트릭을 수행해야합니다. 잊지 마라 : 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> 
+0

당신은 최고입니다 ... 이것은 완벽하게 작동합니다. 많은 감사. – Riza

+0

안녕하세요 j3ffz, 죄송합니다 다시 성가시다.하지만이 후에 또 다른 문제가 있습니다. 나는 각 사례 선택에 대해 다른 클래스를 만들었지 만, 현재 문제는 현재 클래스에서 다른 클래스로 값을 전달하고 있습니다. 이것을 어떻게 할 수 있습니까? 다시 많은 감사드립니다. – Riza

+0

문제 없습니다. 하나의 활동에서 다른 활동으로 데이터를 전달하는 것은 인 텐트를 사용하여 수행 할 수 있습니다. 간단한 예를 들어 다른 답을 추가하겠습니다. – j3ffz

1

다음은 두 번째 문제를 해결하는 데 도움이 될 수있는 예입니다.

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> 
관련 문제