2014-10-17 79 views
0

我有一個列表視圖,它根據用戶通過編輯文本的輸入從SQLite db中填充文本。我的代碼是:從通過LongClick嵌套在ListView中的TextView獲取文本

Cursor cursor = mDbHelper.searchDb((query != null ? query.toString() : "@@@@")); 

    if (cursor == null) 
    { 
    } 
    else 
    { 
    String[] from = new String[] 
       { 
        COLUMN-1, 
        COLUMN-2, 
        COLUMN-3 
       }; 
     int[] to = new int[] 
       {  
        R.id.textView1, 
        R.id.textView2, 
        R.id.textView3 
       }; 

      SimpleCursorAdapter cursorAdapter1 = new  
       simpleCursorAdapter(this,R.layout.searchResults, cursor, from, to); 

      mListView.setAdapter(cursorAdapter1); 
      registerForContextMenu(mListView); 

和我的ContextMenu

@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 

    AdapterView.AdapterContextMenuInfo info =  
    (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
    int menuItemIndex = item.getItemId(); 
    String[] menuItems = 
    { 
     "Option-1", 
     "Option-2" 
    }; 
    String menuItemName = menuItems[menuItemIndex]; 
    TextView textView4 = (TextView) findViewById(R.id.textView1); 
    String text = textView4.getText(); 
    if(menuItemIndex == 0) 
    { 
     Toast.makeText(getApplicationContext(),text,Toast.LENGTH_LONG).show(); 
    } 

    return true; 
} 

我試圖獲取項目的文本(TextView的ListView中),通過在吐司字符串「文本」長期點擊。但它總是返回列表的第一個可查看項目的文本,而不管哪個項目被點擊?我無法弄清楚在代碼中我錯了什麼地方?

回答

0

實現列表視圖的長按監聽器。 請嘗試下面的代碼。希望它能爲你工作。

mListView.setOnItemLongClickListener(new OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> arg0, View view,int arg2, long arg3) { 
       TextView textView4 = (TextView)view.findViewById(R.id.textView1); 
        String text = textView4.getText(); 
       return false; 
      } 
     });. 
+0

謝謝!它爲我工作。但是,如果我在上面的情況下長按一個選項菜單(ContextMenu),首先點擊上下文菜單,它不會執行任何操作,並且對於後續的點擊,它會直接顯示結果而不顯示上下文菜單(老實說會顯示上下文菜單的時間正在進入上下文菜單點擊事件而無需等待點擊) – 2014-10-17 13:35:06

1

嘗試在您的listView中添加一個lonfClick偵聽器,並獲取單擊的項目內容。在你的情況,像這樣的東西:

yourListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

      public boolean onItemLongClick(AdapterView<?> arg0, View view, 
        int pos, long id) { 

       String text = ((TextView)view).getText().toString(); 

       Toast.makeText(getApplicationContext(),text,Toast.LENGTH_SHORT).show(); 

       return true; 
      } 
     }); 

我希望這可以幫助!

+0

謝謝!它爲我工作。但是,如果我在上面的情況下長按一個選項菜單(ContextMenu),首先點擊上下文菜單,它不會執行任何操作,並且對於後續的點擊,它會直接顯示結果而不顯示上下文菜單(老實說會顯示上下文菜單的時間正在進入上下文菜單點擊事件而不用等待點擊) – 2014-10-17 13:38:16

0

你必須在getView方法內部附加onClickListener。 例如:

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

    View rowView = inflater.inflate(R.layout.rowlayout, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.yourTextView); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.anotherView); 
    textView.setText("TEST TEXT"); 

    rowView.setOnLongClickListener(new OnLongClickListener(){ 
     public boolean onLongClick( View v){ 
      // do whatever you want 
      return true; 
     } 
    }); 
    return rowView; 
    }