【问题标题】:Calling activitygroup from customlistadapter从 customlistadapter 调用活动组
【发布时间】:2013-06-28 07:37:28
【问题描述】:

我正在开发一个具有标签功能的 android 应用程序。

一切正常,但我无法从 listadapter 调用 activtygroup。

这是我的列表适配器代码:

import java.util.ArrayList;

import android.app.Activity;
import android.app.ActivityGroup;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.tv.socialgoal.R;
import com.tv.socialgoal.imageloader.ImageLoader;

public class AllyListAdapter extends BaseAdapter{
    Activity ctx;
    ArrayList<Object> alist;
    private ImageLoader imageLoader;

    AllyBean allyBean;
    private String photoPath;

    public AllyListAdapter(Activity ctx, ArrayList<Object> alist) {
        super();
        this.ctx = ctx;
        this.alist = alist;
        imageLoader=new ImageLoader(ctx);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return alist.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View arg1, ViewGroup arg2) {
        LayoutInflater linf=(LayoutInflater) ctx.getSystemService(ctx.LAYOUT_INFLATER_SERVICE);
        View v=linf.inflate(R.layout.ally_list_row, null);
        TextView tv=(TextView)v.findViewById(R.id.allyName);
        ImageView profileImage=(ImageView)v.findViewById(R.id.ally_image);
        Button inviteBtn=(Button)v.findViewById(R.id.invite_btn);

        //SHOW DATA FROM LIST
        allyBean=(AllyBean)alist.get(position);
        tv.setText(allyBean.getName());
        photoPath=allyBean.getAvatar();

        profileImage.setTag(photoPath);
        imageLoader.displayImage(photoPath, ctx, profileImage, false);

        inviteBtn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent intent=new Intent(ctx,AddRemoveFriendScreen.class);
                //intent.putExtra("friendId", allyBean.getUserId());
                ctx.startActivity(intent);
            }
        });
        return v;
    }

    /*public void replaceContentView(String id, Intent newIntent) {
        View view =getLocalActivityManager().startActivity(id,
                newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                .getDecorView();
        this.setContentView(view);
    }*/
}

现在我必须调用 AddRemoveFriends 活动组。

这里是activtygroup的代码:

import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.tv.servercommunication.IServerResponse;
import com.tv.servercommunication.WebServiceCommunicator;
import com.tv.socialgoal.Constant;
import com.tv.socialgoal.R;
import com.tv.socialgoal.network.NetworkAvailablity;
import com.tv.task.TabViewActivity;

public class AddRemoveFriendScreen extends ActivityGroup implements OnClickListener, IServerResponse{

    Button backBtn;
    Button addRemoveFriendBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.friends_profile_screen);

        backBtn=(Button)findViewById(R.id.back_button);
        addRemoveFriendBtn=(Button)findViewById(R.id.add_remove_frnd_btn);

        backBtn.setOnClickListener(this);
        addRemoveFriendBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.back_button:

            break;

        case R.id.add_remove_frnd_btn:
            callAddFriend_WS();
            break;

        default:
            break;
        }

    }

    private Handler _handler = new Handler() {
        public void dispatchMessage(Message msg) {
            switch (msg.arg1) {
            case Constant.PID_ADD_REMOVE_FRIEND:
                if (parseResponse(msg.obj.toString()) == true) {
                    Intent intent = new Intent(getParent(),
                            TabViewActivity.class);
                    startActivity(intent);
                } else {
                    runOnUiThread(new Runnable() {
                        public void run() {
                            Constant.showAlertDialog(
                                    Constant.DIALOG_TITLE_ERROR,
                                    "Invalid username or password.",
                                    getParent(), false);
                        }
                    });
                }
                break;

            default:
                break;
            }
        }
    };

    // GET USER ACCESSTOCKEN AND USER ID
    private boolean parseResponse(String response) {

        String message = null;
        JSONObject post;

        boolean isUserInfoAvail = false;
        try {
            JSONObject postjsonObject = new JSONObject(response);
            JSONObject posts = postjsonObject.getJSONObject("posts");
            post = posts.getJSONObject("post");
            message = post.getString("message");

            if (message.equalsIgnoreCase("failure")) {
                isUserInfoAvail = false;
            } else {
                isUserInfoAvail = true;
            }
        } catch (JSONException e1) {
            e1.printStackTrace();
        }
        return isUserInfoAvail;
    }

    public void callAddFriend_WS() {

        if (NetworkAvailablity.checkNetworkStatus(AddRemoveFriendScreen.this)) {
            // PREPARE URL
            Constant.methodURL = "http://admin.tvdevphp.com/goalmachine/add_friend.php";

            // PREPARE REQUEST PARAMETER
            ArrayList<NameValuePair> requestParaList = new ArrayList<NameValuePair>();
            requestParaList.add(new BasicNameValuePair("self_user_id", "1"));
            requestParaList.add(new BasicNameValuePair("user_friend_id", "2"));

            // CALL WEBSERVICE
            WebServiceCommunicator.getInstance().registerForServerResponse(
                    AddRemoveFriendScreen.this);
            WebServiceCommunicator.getInstance().callGetAppWebService(
                    Constant.showDialog, getParent(),
                    Constant.methodURL, getParent(), Constant.PID_ADD_REMOVE_FRIEND,
                    false, requestParaList);
        } else {
            Constant.showAlertDialog(Constant.errorTitle,
                    Constant.MSG_CHECK_INTERNET_SETTING, getParent(),
                    false);

        }
    }

    // SERVER RESPONSE METHOD
    public void serverResponse(String response, int processid) {
        Message msg = new Message();
        msg.arg1 = processid;
        msg.obj = response;
        _handler.dispatchMessage(msg);
    }

}

请建议我如何从 listadapter 调用 activtygroup。

【问题讨论】:

  • 你不能从任何地方调用 ActivityGroup,因为它不是“可调用的”,不管它是什么意思
  • 像简单的活动调用 Intent intent=new Intent(this,AnotherActivty.class);开始活动(意图);我们不能从列表适配器调用 activtygroup 吗?
  • 当您从适配器午餐 AddRemoveFriendScreen 时是否有 logcat 错误日志?
  • 我可以像一个简单的活动一样启动 AddRemoveFriendsScreen,但我使用的是标签,所以我必须将其称为 activtygroup。有什么办法...?
  • 再一次,你不能“调用”,但是你可以通过调用 ctx.startActivity(intent) 来启动一个新的 Activity

标签: android listadapter activitygroup


【解决方案1】:

这样你就可以通过这样的方式访问所有内容。

 public class AddRemoveFriendScreen extends ActivityGroup implements OnClickListener, IServerResponse
   {

       @Override
         protected void onCreate(Bundle savedInstanceState) 
           {
            .......
            } 

        class AllyListAdapter extends BaseAdapter
        {
                //Now you can call everything from ActivityGroup
        } 
   } 

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    根据androiddevelopper reference,你可以使用Fragments。

    ActivityGroup 已弃用。改用新的 Fragment 和 FragmentManager API;这些也可以通过 Android 兼容包在旧平台上使用。

    你可以试试这个技巧。

    inviteBtn.setOnClickListener(new OnClickListener() {
    
        public void onClick(View v) {
            if(ctx instanceof ActivityGroup){
                Intent intent = new Intent(ctx.getParent(),AddRemoveFriendScreen.class);
                //intent.putExtra("friendId", allyBean.getUserId());
                ctx.getParent().startActivity(intent);
            }
            else{
                Intent intent = new Intent(ctx,AddRemoveFriendScreen.class);
                //intent.putExtra("friendId", allyBean.getUserId());
                ctx.startActivity(intent);
            }
        }
    });
    

    如果它不起作用,只需在 AddRemoveFriendScreen 类中为您的适配器使用内部类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多