gpt4 book ai didi

java - ArrayAdapter 构建 ArrayList 时未正确处理单击事件

转载 作者:行者123 更新时间:2023-12-01 11:14:04 25 4
gpt4 key购买 nike

我基本上有 1 个 Activity 启动另一个 Activity 并构建一个 ArrayList 来填充新 Activity 。我正在尝试处理列表单击事件并传回从列表中单击的图片或文本名称。
这是我的 ArrayAdapter:

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
StatesHolder holder = null;

if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);

holder = new StatesHolder();
holder.statePic = (ImageView) row.findViewById(R.id.imgStatePic);
holder.stateName = (TextView) row.findViewById(R.id.txtStateName);

row.setTag(holder);
} else {
holder = (StatesHolder) row.getTag();
}

States states = data.get(position);
holder.stateName.setText(states.StateName);
holder.statePic.setImageBitmap(states.StatePic);

row.setClickable(true);
row.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(context, ActivityLocalReps.class);
//intent.putExtras("StateName", holder.stateName); ** holder.stateName is not accessible here, I somehow need this info though.
context.startActivity(intent);
}
});

return row;
}

如果我能在这次通话中传递一些东西,那就太好了:

Intent intent = new Intent(context, ActivityLocalReps.class(goodStuffINeed));

我尝试回调的 Activity 正是启动此新 Activity 的上一个 Activity 。我需要以某种方式使用单击项信息重载新的 Activity 构造函数,以便以不同的方式流经原始类,或者找出单击的实际图片/值或文本/值。该类:

boolean userSelectedCustomState = false;
String userSelectedState = "";
public ActivityLocalReps(String state){
userSelectedCustomState = true;
userSelectedState = state;
}
public ActivityLocalReps(){
}

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

String imageName;
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if(extras == null) {
imageName = null;
} else {
imageName = extras.getString("StateName");
}
} else {
imageName = (String) savedInstanceState.getSerializable("StateName");
}

我想我在这里遗漏了一些东西,或者没有正确的设置来处理最后一个类中的这个点击操作?感谢您的帮助!
**编辑1:

 public void setStatesAdapter(ArrayList<States> allStates) {
ChangeStateAdapter adapter = new ChangeStateAdapter(this, R.layout.list_states, allStates);
ListView statesListView = (ListView) findViewById(R.id.listView_States);

statesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getApplicationContext(), ActivityLocalReps.class);
intent.putExtras("StateName", data.get(position).stateName);
getApplicationContext().startActivity(intent);
}
});

statesListView.setAdapter(adapter);
}

目前这条线不可用,似乎是我需要得到的部分:

intent.putExtras("StateName", data.get(position).stateName);

最佳答案

不要使用OnClickListener,而是使用OnItemClickListener。它更适合适配器。例如:

mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(context, ActivityLocalReps.class);
intent.putExtras("StateName", data.get(position).stateName);
context.startActivity(intent);
}
});

您应该避免尝试直接使用 ViewHolder(StatesHolder,在您的情况下)或适配器的行。相反,使用支持 View 的数据。这是一个更好的模式。

编辑你是对的,你不能在 getView() 方法中调用此代码。它需要位于您创建适配器并将其设置在 ListView 上的位置(如您在编辑中所示)。要回答您如何获取数据的问题,您可以调用 Adapter 的以下方法类(您应该覆盖它):

@Override
public States getItem(int position) {
return data.get(position);
}

确保您还覆盖 getCount()

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

除非您这样做,否则您的适配器将无法正常工作。

关于java - ArrayAdapter 构建 ArrayList 时未正确处理单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32042148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com