如何将此活动转换为片段?

时间:2014-08-29 11:54:28

标签: android android-fragments rss

我正在尝试解析rss feed,因为我是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);
  }

有人可以帮帮我???

2 个答案:

答案 0 :(得分:0)

好的,这是我的尝试:

我已经用baseadapter替换了你的ArrayAdapter(对你的项目发生的事情进行了更好的调整控制) - 定义一个类似于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;
    }
}
}

答案 1 :(得分: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);
  }