Android 适配器的 getView() 未调用 activity
Android adapter's getView() not calling an activity
我正在尝试从适配器 class 调用 activity。我的 activity class 没有构造函数,但 onCreate()
。如何从 getView()
调用它?我搜索了解决方案,但没有用。
我的适配器getView()
:
public View getView(int position, View convertView, ViewGroup parent) {
//SharedPostView holder;
PostActivity holder;
if (convertView == null) {
Log.d("network frag list"," convertView null ");
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.activity_post, null);
holder = new PostActivity();
convertView.setTag(holder);
} else {
Log.d("network frag list"," convertView.getTag() ");
holder = (PostActivity)convertView.getTag();
}
holder.init(position);
Log.d("network frag list", " getView");
return convertView;
}
如果我没理解错的话,你正试图从你的列表视图中启动另一个 activity。为此,您需要一个意图。
Intent intent = new Intent(this, MySecondActivity.class);
startActivity(intent);
试试这个,
这是我的 getView 来自适配器 class,
@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
View myView = convertView;
final ViewHolder holder;
try {
if (myView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
myView = inflater.inflate(R.layout.row_affiliates_list, null);
holder = new ViewHolder();
holder.txtAffiliateHeader = (TextView) myView.findViewById(R.id.txtAffiliateHeader);
holder.rlMain = (RelativeLayout) myView.findViewById(R.id.rlMain);
holder.viewLine = (TextView) myView.findViewById(R.id.viewLine);
myView.setTag(holder);
} else {
holder = (ViewHolder) myView.getTag();
}
holder.txtAffiliateHeader.setText(""+ AffiliatesList.get(position).getStrAffiliateTitle());
holder.rlMain.setTag(position);
holder.rlMain.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int arg2 = Integer.parseInt(v.getTag().toString());
Intent intent = new Intent(context, SecondActivity.class);
context.startActivity(intent);
}
});
return myView;
} catch (Exception e) {
return myView;
}
}
这就是您可以通过单击按钮或完整相对布局从适配器 class 调用 activity 的方法。
您需要了解方法的可访问性startActivity()
。点击 Android Studio
中的 ctrl+click
后,您可以看到此方法的详细信息。这是细节,class 层级到 Activity 如下-
Context (android.content)
ContextWrapper (android.content)
ContextThemeWrapper (android.view)
Activity (android.app)
Context
class 有一个抽象方法。
public abstract void startActivity(Intent intent);
这在 class ContextWrapper
和 Activity
中被覆盖。
因此,您可以从任何派生的 classes 或派生的 classes.
的引用调用方法 startActivity(Intent intent)
所以你有参考 Context
你可以调用这个方法-
context.startActivity(intent)
我正在尝试从适配器 class 调用 activity。我的 activity class 没有构造函数,但 onCreate()
。如何从 getView()
调用它?我搜索了解决方案,但没有用。
我的适配器getView()
:
public View getView(int position, View convertView, ViewGroup parent) {
//SharedPostView holder;
PostActivity holder;
if (convertView == null) {
Log.d("network frag list"," convertView null ");
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.activity_post, null);
holder = new PostActivity();
convertView.setTag(holder);
} else {
Log.d("network frag list"," convertView.getTag() ");
holder = (PostActivity)convertView.getTag();
}
holder.init(position);
Log.d("network frag list", " getView");
return convertView;
}
如果我没理解错的话,你正试图从你的列表视图中启动另一个 activity。为此,您需要一个意图。
Intent intent = new Intent(this, MySecondActivity.class);
startActivity(intent);
试试这个,
这是我的 getView 来自适配器 class,
@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
View myView = convertView;
final ViewHolder holder;
try {
if (myView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
myView = inflater.inflate(R.layout.row_affiliates_list, null);
holder = new ViewHolder();
holder.txtAffiliateHeader = (TextView) myView.findViewById(R.id.txtAffiliateHeader);
holder.rlMain = (RelativeLayout) myView.findViewById(R.id.rlMain);
holder.viewLine = (TextView) myView.findViewById(R.id.viewLine);
myView.setTag(holder);
} else {
holder = (ViewHolder) myView.getTag();
}
holder.txtAffiliateHeader.setText(""+ AffiliatesList.get(position).getStrAffiliateTitle());
holder.rlMain.setTag(position);
holder.rlMain.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int arg2 = Integer.parseInt(v.getTag().toString());
Intent intent = new Intent(context, SecondActivity.class);
context.startActivity(intent);
}
});
return myView;
} catch (Exception e) {
return myView;
}
}
这就是您可以通过单击按钮或完整相对布局从适配器 class 调用 activity 的方法。
您需要了解方法的可访问性startActivity()
。点击 Android Studio
中的 ctrl+click
后,您可以看到此方法的详细信息。这是细节,class 层级到 Activity 如下-
Context (android.content)
ContextWrapper (android.content)
ContextThemeWrapper (android.view)
Activity (android.app)
Context
class 有一个抽象方法。
public abstract void startActivity(Intent intent);
这在 class ContextWrapper
和 Activity
中被覆盖。
因此,您可以从任何派生的 classes 或派生的 classes.
startActivity(Intent intent)
所以你有参考 Context
你可以调用这个方法-
context.startActivity(intent)