Nella mia applicazione Android, ho un frammento-frammento1. All'interno quel frammento, Ho una funzione statica 'function1'.I cercato di definire un buttton all'interno di una funzione statica utilizzando,findViewById non funziona in una funzione statica all'interno del frammento
button=(Buton)getActivity().findViewById(R.id.button1);
Ma Eclipse genera un errore tipo "non può fare riferimento statico al metodo non statico getActivity() dal tipo Fragment ". Cosa ho fatto di sbagliato? Ho bisogno che questa funzione1 sia statica, in modo da poterla chiamare da un'altra classe. Voglio dire, devo popolare la vista elenco dall'attività principale quando seleziono un particolare frammento.
Fragment1 =>
public class Fragment1 extends Fragment{
public static String feedurl="http://www.abcd.com/en/rssfeeds/1_2_3_5/latest/rss.xml";
static String URL = "";
static final String KEY_HEAD = "item"; // parent node
static final String KEY_DATE = "pubDate";
public static String headflag="";
int f=0;
static Button button;
HeadlinesAdapter adapter;
private TextView mMessageView;
private Button mClearButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.first_fragment, container, false);
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
function1();
populate_listview();
}
public static void function1()
{
URL="http://www.abcd.com/en/rssfeeds/1_2_3_5/latest/rss.xml";
ArrayList<HashMap<String, String>> newsList = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL);
Document doc = parser.getDomElement(xml);
NodeList nl = doc.getElementsByTagName(KEY_HEAD);
NodeList itemLst = doc.getElementsByTagName("item");
String MarqueeStr="";
for (int i = 0; i < nl.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
newsList.add(map);
}
button=(Buton)getActivity().findViewById(R.id.button1);;// Here it shows error.
adapter=new Adapter1(getActivity(), newsList);
list.setAdapter(adapter);
}
}
E il mio mainactivity è,
ViewpagerActivity =>
public class ViewPagerActivity extends FragmentActivity {
private ViewPager mViewPager;
private MessageLoader mLoader;
private Button mSenderButton, mReceiverButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// We get UI references
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mSenderButton = (Button) findViewById(R.id.sender_button);
mReceiverButton = (Button) findViewById(R.id.receiver_button);
// We set pager adapter
mViewPager.setAdapter(new MyAdapter(this));
// We set receiver button listener
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
int i=0;
public void onPageSelected(int position) {
if(position==0){
}else if(position==1 && i==0){
Fragment1.function1(); // Here Iam calling function1
i++;
}
}
public void onPageScrollStateChanged(int state) {
}
});
mReceiverButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mViewPager.setCurrentItem(0);
}
});
// We set sender button listener
mSenderButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mViewPager.setCurrentItem(1);
}
});
}
/**
* Adapter for ViewPAger that manages background interactions with fragments
*/
private class MyAdapter extends FragmentPagerAdapter{
private Context mContext;
private String[] frags = {Headlines.class.getName(), Kerala.class.getName()};
public MyAdapter(FragmentActivity activity) {
super(activity.getSupportFragmentManager());
mContext = activity;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment frag = (Fragment) super.instantiateItem(container, position);
if(frag instanceof MessageLoader){
mLoader = (MessageLoader) frag;
}
return frag;
}
@Override
public Fragment getItem(int pos) {
return Fragment.instantiate(mContext, frags[pos]);
}
@Override
public int getCount() {
return frags.length;
}
}
}
'funzione1()' sembra essere non è statico! –
L'ho modificato .. –