2014-07-01 2 views
22

내 조각에 sendData() 메서드가 있습니다. 이 메서드는 새로운 Activity를 시작합니다. 내 ArrayAdapter에서이 메서드를 호출하고 싶습니다.어댑터에서 조각 메서드 호출

HomeFragment.java

stagAdaper = new StaggeredAdapter(myContext, android.R.layout.simple_list_item_1, getList); 
      mGridView.setAdapter(stagAdaper); 
    private void sendData(int position) 
    { 

     myDialog = new ProgressDialog(myContext).show(getActivity(), "Fetching news..", "Just a moment"); 

     myDialog.getWindow().setContentView(R.layout.openarticlewaitprogress); 
     myDialog.getWindow().setTitle("Loading.."); 
     myDialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
     new NewsDetails(myDialog); 



      Intent nIntent = new Intent(getActivity(),Details.class); 

       String Body=getList.get(position).getBody(); 

      newsIntent.putExtra("Body", Body); 


      startActivity(nIntent); 

    } 

StaggeredAdapter.java

viewHolder.layGridLayout.setOnClickListener(new View.OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      // TODO Auto-generated method stub 
      //viewHolder.layGridLayout.setForeground(R.drawable.foreground_selector); 

     } 
    }); 
    return convertView; 
    } 

내가 어떻게 할 수 - : 여기

내 코드?

+0

모습이 당신이 조각을 전달하는 방법 : http://stackoverflow.com/questions/24081101/using-localbroadcastmanager-to-communicate-from-fragment-to-activity/24083101#24083101 –

답변

94

해결 방법 1 : 어댑터를 직접 조각화의 내부 클래스로 만들면 직접 메서드를 호출 할 수 있습니다.

해결 방법 2 : Fragment를 매개 변수로 사용하도록 어댑터 생성자를 업데이트하십시오. 같은

뭔가 :

customAdapter = new CustomAdapter(myContext, android.R.layout.simple_list_item_1, getList, HomeFragment.this); 

및 업데이트 어댑터의 생성자 :

public CustomAdapter(Context context, int id, HomeFragment fragment) { 
    this.fragment = fragment; 
} 

는 당신이 조각 변수를 사용하여 메소드를 호출합니다.

fragment.doSomething(); 
+0

I 이것을 시도했다. 그런 다음 ProgressDialog 변수에서 NullPointerException을 얻습니다. – user3713706

+0

그럼 null 포인터를 해결하십시오. NPE가 나타나는 정확한 라인을 알려주시겠습니까? –

+0

@ user3713706이 솔루션을 사용해야합니다. logcat을 게시하십시오. 어딘가에 오류가 있습니다. –

-2

당신은 정적

public static void sendData(int position) 
{ 
    ...... 
} 

를 n 나는이 대답을 늦게 알고 있지만 그것을 할 수있는 2 가지 더있다

@Override 
public void onClick(View v) 
{ 
    // TODO Auto-generated method stub 
    HomeFragment.sendData(position) 
    ........  
} 
+0

그럴 경우 getActivity()에 액세스 할 수 없습니다 – user3713706

+0

** 대신 myContext **를 사용할 수 있습니다. – qulfille

1

로 부르는 같이 sendData 방법을 만들 수 있습니다 :

  1. adapter에서 broadcast을 보내고 fragment에 등록 할 수도 있습니다.

  2. 인터페이스를 사용하십시오. 자세한 내용은 this SO 질문을 참조하십시오.