在ListActivity上使用getFragmentManager

时间:2013-09-26 11:02:35

标签: android android-fragments android-fragmentactivity

我只是想先知道这是否可行。我创建了一个custom listView based on the tutorial I read from Sai Geetha。它在我的应用程序上完美运行,除了它需要扩展ListActivity而不是FragmentActivity。现在我很难为此配置和添加对话框,因为我需要应用片段对话框而且我不能使用getFragmentManager()因为我没有使用FragmentActivity。在不牺牲ListActivity的情况下,还有另一种方法可以解决这个问题吗?谢谢!

到目前为止,这是我的代码

XML:

conversation_list_view

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@id/android:list"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="20dp"/>
</LinearLayout>

group_screen

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="@color/white">

    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="48dp"
            android:background="@drawable/action_bar_separator"
            android:id="@+id/relativeLayout">

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="Group Name"
                android:id="@+id/txt_group_name"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                android:textColor="@color/dark_gray"
                android:shadowColor="@color/dark_shadow"
                android:shadowRadius="1"
                android:shadowDy="1"/>

        <Button
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:id="@+id/btn_back"
                android:background="@drawable/btn_navigate_back"
                android:layout_centerVertical="true"
                android:layout_alignParentLeft="true"/>

        <Button
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:id="@+id/btn_information"
                android:background="@drawable/btn_information"
                android:layout_alignParentTop="true"
                android:layout_alignParentRight="true"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"/>

    </RelativeLayout>

    <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

        <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Conversations"
                android:id="@+id/textView2"
                android:textColor="@color/holo_light_blue"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="10dp"/>

        <LinearLayout
                android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="340dp"
                >

            <fragment
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:name="com.mark.exercise.ListViewFragment"
                    android:id="@+id/fragment"/>
        </LinearLayout>

        <Button
                android:layout_width="match_parent"
                android:layout_height="42dp"
                android:text="Ask something"
                android:id="@+id/btn_ask_question"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:textSize="15dp"/>

    </LinearLayout>
</LinearLayout>

爪哇

package com.mark.exercise;


import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;


/**
 * Created by pc on 9/24/13.
 */
public class GroupActivity extends FragmentActivity {

    Button information, back, new_topic;
    ListView conversations;
    TextView group_name;
    String name, group_description, group_administrator,image_id;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.group_screen);
        Intent intent = getIntent();

        name = intent.getStringExtra("group_name");
        group_description = intent.getStringExtra("group_description");
        group_administrator = intent.getStringExtra("group_administrator");
        image_id = intent.getStringExtra("image_id");

        information = (Button)findViewById(R.id.btn_information);
        back = (Button)findViewById(R.id.btn_back);
        new_topic = (Button)findViewById(R.id.btn_ask_question);
        group_name = (TextView)findViewById(R.id.txt_group_name);


        group_name.setText(name);


        information.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(GroupActivity.this, GroupInformationActivity.class);
                intent.putExtra("group_name",name);
                intent.putExtra("group_description",group_description);
                intent.putExtra("group_administrator",group_administrator);
                intent.putExtra("image_id",image_id);
                startActivity(intent);
                GroupActivity.this.overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
            }
        });

        new_topic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showCreateNewTopicDialog();
            }
        });


        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onBackPressed();
            }
        });
    }



    private void showCreateNewTopicDialog() {
        FragmentManager fm = getSupportFragmentManager();
        DialogFragmentCreateGroup createGroup = new DialogFragmentCreateGroup();
        createGroup.show(fm, "create_group");
    }

    @Override
    public void onBackPressed(){
        super.onBackPressed();
        overridePendingTransition(R.anim.in_from_right,R.anim.out_to_left);
    }


}

列出片段

package com.mark.exercise;


import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;

/**
 * Created by pc on 9/27/13.
 */

public class ListViewFragment extends ListFragment {

    final ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.conversations_list_view,
                container, false);

        setListView set_list = new setListView();
        set_list.start();

        return view;
    }


    public void onListItemClick(ListView l, View v, int position, long id) {
        //super.onListItemClick(l, v, position, id);
        Intent intent = new Intent(getActivity(), ConversationActivity.class);
        startActivity(intent);
        getActivity().overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
    }

    private class setListView extends Thread {
        public void run() {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    setConversations();
                }
            });
        }
    }

    private void setConversations(){
        list.clear();
        SimpleAdapter adapter = new SimpleAdapter(
                getActivity(),
                list,
                R.layout.custom_list_main_conversations,
                new String[] {"message","date", "reply_count", "stars_count"},
                new int[] {R.id.txt_conversation_message,R.id.txt_topic_date, R.id.txt_no_of_reply, R.id.txt_no_of_stars}
        );

        for(int ctr=0;ctr<=5;ctr++){
            Random randomGenerator = new Random();
            HashMap<String,String> item_list = new HashMap<String,String>();
            item_list.put("message", "This is the conversation number "+(ctr+1)+" and this topic is just a dummy data.");
            item_list.put("date", "0"+(ctr+1)+"/0"+(ctr+2)+"/2013 "+(ctr+1)+":00:am");
            item_list.put("reply_count", String.valueOf(ctr+randomGenerator.nextInt(10)));
            item_list.put("stars_count", String.valueOf(ctr+randomGenerator.nextInt(10)));
            list.add(item_list);
        }

        android.app.ListFragment lf = new android.app.ListFragment();
        lf.setListAdapter(adapter);
    }

}

1 个答案:

答案 0 :(得分:1)

您可以在ListFragment内使用FragmentActivity,而不是使用ListActivity