2013-05-27 30 views
0

你好我有兩個活動與ListViews,我可以從第一次調用第二個活動,但是當我關閉第二個活動並返回到第一個活動時,OnItemClick不起作用,所以你知道哪裏是問題以及如何解決它?不工作OnItemClick當我使用兩個活動

第一個活動的onCreate

 @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_words_activity); 
    list=(ListView) findViewById(R.id.add_words_list); 
    getClassData(); 
    wordItems=new ArrayList<WordItem>(); 
    adapter=new AddWordsAdapter(this, wordItems); 
    list.setAdapter(adapter); 

    list.setOnItemClickListener(itemClick); 

    list.setOnTouchListener(listViewTouchListener); 

} 

第一個活動項目單擊觸摸

  private OnItemClickListener itemClick=new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> adapter, View view, int position, 
      long id) { 
     isEditWordDilaog=true; 
     start=words.get(position); 
     Log.d(start.getWord(),"what the fuck"); 
     end=new WordData(); 
     final int langId=start.getLanguageId(); 
     end.setLanguageId(langId); 
     showDialog(WORD_DIALOG); 
     wordViewHolder.language.setImageResource(RProvider. 
       getLangImageId(languages.get(langId))); 
     wordViewHolder.word.setText(start.getWord()); 
     wordIndex=position; 

    } 

}; 

第一項活動:

private OnTouchListener listViewTouchListener =new OnTouchListener() { 
    float startX,endX; 
    boolean isMove=false; 
    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     int action=event.getAction(); 
     switch(action){ 

     case MotionEvent.ACTION_DOWN: 
      startX=event.getX(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      isMove=true; 
      break; 
     case MotionEvent.ACTION_UP: 
      endX=event.getX(); 
      if(isMove==true && startX<endX){ 
       Rect rect=new Rect();   
       int endY=(int)event.getY(); 
       for(int i=0;i<list.getChildCount();i++){ 
        View child=list.getChildAt(i); 
        int left=child.getLeft(); 
        int right=child.getRight(); 
        int bottom=child.getBottom(); 
        int top=child.getTop(); 
        rect.set(left, top, right, bottom); 
        if(rect.contains((int)endX,endY)){ 
         Intent intent=new Intent(AddWordsActivity.this,AddTranslateActivity.class); 
         int id=words.get(i).getId(); 
         intent.putExtra(Names.WORD_ID,id); 
         startActivity(intent); 
         break; 
        } 
       } 
      } 
      /* 
      endX=event.getX(); 
      if(startX<endX){ 
       isMove=true; 

      }*/ 
      break; 

     } 
     isLongClick=!isMove; 
     return isMove; 
    } 
}; 

在我使用後退鍵關閉它第二次活動。之後itemClick不起作用

+0

發佈您的代碼,以便我們可以看看。 – Tushar

+0

的確,你應該在這裏發佈一些代碼,以便我們能夠找到你的錯誤,或者至少幫助你找到它。如果不是這個問題將很快關閉。 – hcpl

回答

0

我不認爲你需要OnTouchListener。除非它正在做的事情不是開始Intent。看起來您的OnClickListener只設置了一些變量,而不是啓動Intent的方法。從Android開發者文檔:

public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id) 

Added in API level 1 
Callback method to be invoked when an item in this AdapterView has been clicked. 

Implementers can call getItemAtPosition(position) if they need to access the data associated with the selected item. 

Parameters 
parent  The AdapterView where the click happened. 
view  The view within the AdapterView that was clicked (this will be a view provided by the adapter) 
position The position of the view in the adapter. 
id   The row id of the item that was clicked. 

我會刪除OnTouchListener並將這裏面的OnClickListener

Intent intent = new Intent(AddWordsActivity.this,AddTranslateActivity.class); 
int id = words.get(position).getId(); 
intent.putExtra(Names.WORD_ID,id); 
startActivity(intent); 

您可以由OnClickListener給出的id更換整個int id變量,但不知道你的words變量是什麼,我無法確定地告訴你。

Intent聲明添加到您的OnClickListener意味着每次單擊該項目時,它將啓動Intent。從那裏,你添加你的演員,你就完成了。

祝你好運,我希望這有助於。