0

您好,我有两个 ListViews 活动,我可以从第一个活动调用第二个活动,但是当我关闭第二个活动并返回第一个活动时,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);

}

第一个活动ItemClick

          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 之后不起作用

4

1 回答 1

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

您可能可以用给定的变量替换整个int id变量,但不知道您的变量是什么,我不能肯定地告诉您。idOnClickListenerwords

Intent声明添加到您的OnClickListener意味着每次单击该项目时,它将启动Intent. 从那里,你添加你的额外内容,你就完成了。

祝你好运,我希望这会有所帮助。

于 2013-05-28T00:40:05.540 回答