2014-08-29 29 views
0

我試圖解析RSS提要,因爲我在android系統是一個初學者,我不能找到一種方法,通過片段做.. 這是我想轉換成片段我如何將此活動轉換爲片段?

public class Clients extends Activity { 
private Clients local; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 

    local = this; 

    GetRSSDataTask task = new GetRSSDataTask(); 

    task.execute("http://www.itcuties.com/feed/"); 

    Log.d("ITCRssReader", Thread.currentThread().getName()); 
} 

private class GetRSSDataTask extends AsyncTask<String, Void, List<RssItem> > { 
    @Override 
    protected List<RssItem> doInBackground(String... urls) { 

     Log.d("ITCRssReader", Thread.currentThread().getName()); 

     try { 
      RssReader rssReader = new RssReader(urls[0]); 

      return rssReader.getItems(); 

     } catch (Exception e) { 
      Log.e("ITCRssReader", e.getMessage()); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(List<RssItem> result) { 

     ListView itcItems = (ListView) findViewById(R.id.listView); 

     ArrayAdapter<RssItem> adapter = new ArrayAdapter<RssItem>(local,android.R.layout.simple_list_item_1,result); 
      itcItems.setAdapter(adapter); 

     itcItems.setOnItemClickListener(new ListListener(result, local)); 
    } 
} 
} 
活動

我已經試圖將其轉換,但onItemClick出現一些錯誤。

public void onItemClick(AdapterView parent, View view, int pos, long id) { 
    Intent intent = new Intent(activity, Clients.class); 
    intent.putExtra("description", listItems.get(pos).getLink()); 
    activity.startActivity(intent); 
    } 

有人可以幫我嗎?

回答

0

你應該調用沒有ui的片段。需要添加ui,但不能使其可見。

public class MyFragmet extends Fragment { 
public static final String TAG = "MyFragmet"; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.MY_FRAGMENT_NULL_VIEW, 
container, false); 
local = this; 

GetRSSDataTask task = new GetRSSDataTask(); 
task.execute("http://www.itcuties.com/feed/"); 
Log.d("ITCRssReader", Thread.currentThread().getName()); 
     return view; 
    } 
private class GetRSSDataTask extends AsyncTask<String, Void, List<RssItem> > { 
@Override 
protected List<RssItem> doInBackground(String... urls) { 

Log.d("ITCRssReader", Thread.currentThread().getName()); 
try { 
      RssReader rssReader = new RssReader(urls[0]); 
return rssReader.getItems(); 
} catch (Exception e) { 
      Log.e("ITCRssReader", e.getMessage()); 
     } 
return null; 
    } 
@Override 
    protected void onPostExecute(List&lt;RssItem&gt; result) { 
Intent intent = new Intent(); 
intent.setAction(TAG); // also here you can add other information 
sendBroadcast(intent); 
} 
} 
} 

這添加到活動

private BroadcastReceiver receiver; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
.... 
receiver = new BroadcastReceiver() { 
@Override 
public void onReceive(Context context, Intent intent) { 
ListView itcItems = (ListView) findViewById(R.id.listView); 

ArrayAdapter&lt;RssItem&gt; adapter = new ArrayAdapter&lt;RssItem&gt;(local,android.R.layout.simple_list_item_1,result); 
      itcItems.setAdapter(adapter); 
itcItems.setOnItemClickListener(new ListListener(result, local));  
     } 
    }; 
    registerReceiver(receiver, new IntentFilter(MyFragmet.TAG)); 
FragmentManager fm = getFragmentManager(); 
     Fragment fragment = fm.findFragmentByTag(MyFragmet.TAG); 
     if (fragment == null) { 
      getFragmentManager() 
        .beginTransaction() 
        .add(R.id.fragment, new MyFragmet(),MyFragmet.TAG) 
        .commit(); 
     } 
@Override 
    protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(receiver); 
    } 
0

好吧,這裏是我的嘗試:

我已經更換了你ArrayAdapter用baseadapter(精細調諧在什麼與你的項目發生控制) - 定義佈局類同您在ArrayAdapter有列表項,點BaseAdapter,並在onCreateView塊中設置視圖。

除此之外,我認爲它應該會相當不錯。

public class Clients extends Fragment implents ListView.OnItemClickListener { 
private Clients local; 
private ListView itcItems; 
private RssItemBaseAdapter adapter; 
private ArrayList<Rssitem> itemList = new ArrayList<RssItem>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    local = this; 

    GetRSSDataTask task = new GetRSSDataTask(); 
    task.execute("http://www.itcuties.com/feed/"); 
    Log.d("ITCRssReader", Thread.currentThread().getName()); 
} 

@Override 
public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    view rootView = infalter.inflate(R.layout.activity_my,container,false); 
    itcItems = (ListView)findViewById(R.id.listView); 
    itcItems.setOnItemClickListener(this); 
    adapter = new RssItemBaseAdapter(getActivity(),itemList); 
    itcItems.setAdapter(adapter); 
} 

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i , long l){ 
    RssItem item = adapter.getItem(i); 
    <Handle your Intent code here> 
} 

private class GetRSSDataTask extends AsyncTask<String, Void, List<RssItem> > { 
    @Override 
    protected List<RssItem> doInBackground(String... urls) { 
     Log.d("ITCRssReader", Thread.currentThread().getName()); 

     try { 
      RssReader rssReader = new RssReader(urls[0]); 
      return rssReader.getItems(); 

     } catch (Exception e) { 
      Log.e("ITCRssReader", e.getMessage()); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(List<RssItem> result) { 
     itemList = result; 
     adapter.swapList(itemList); 
     adapter.notifyDataSetChanged(); 
    } 
} 

private class RssItemBaseAdapter extends BaseAdapter(){ 

    private Context mContext; 
    private ArrayList<RssItem> mRssList; 

    public RssItemBaseAdapter(Context context, ArrayList<RssItem> obj){ 
     mContext = context; 
     mRssList = obj; 
    } 

    @Override 
    public int getCount() {return mRssList.size(); } 

    @Override 
    public RssItem getItem(int i) {return mRssList.get(i); } 

    @Override 
    public long getItemId(int i) { return i } 

    @Override 
    public view getView(int i, View convertView, ViewGroup parent){ 
     View rootView = convertView; 
     if (rootView == null){ 
      View rootView = Inflater.from(mContext).inflate(R.layout.YOUR_SIMPLE_LAYOUT_HERE,parent,false); 
     } 
     <do your view setting here> 
     return rootView; 
    } 

    public ArrayList<RssItem> swapList (ArrayList<RssItem> newList){ 
     ArrayList<RssItem> oldList = mRssList; 
     mRssList = newList; 
     return oldList; 
    } 
} 
}