【问题标题】:OnClickListener doesn't work in a JSON Poulated ListViewOnClickListener 在 JSON 填充 ListView 中不起作用
【发布时间】:2015-08-12 11:35:25
【问题描述】:

我使用由 JSON 填充的 ListView,这部分有效,但是当我单击列表项时,单击不起作用。

我读过关于 setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); 但我不明白该放在哪里。

这是我的代码

这是一个显示在 MainActivity 的 TabLayout 中的片段

public class Tab3 extends Fragment {
private View v;

private  ListView listView;
private ArrayList<CustomModel> mCustomArrayList = new ArrayList<CustomModel>();

private AdapterCustom adapter1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String equipeJSONString=((MainActivity)getActivity()).equipeJSONString;

    try {

        JSONObject obj = new JSONObject(equipeJSONString);
        JSONArray equipe = obj.getJSONArray("equipe");

          for (int i = 0; i < equipe.length(); i++) {
            JSONObject c = equipe.getJSONObject(i);
            //stock les valeurs du Json dans des vars
            String nom = c.getString("nom");
            String photo = c.getString("photo");
            String texte = c.getString("texte");
            mCustomArrayList.add(new CustomModel(nom, texte,photo));

         }

    } catch (Throwable t) {
        Log.e("Tab3", "Erreur Could not parse malformed JSON : \"" + equipeJSONString + "\"");
    }
}

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    v =inflater.inflate(R.layout.tab_3,container,false);
  //  v.setBackgroundColor(Color.BLACK);      

    listView = (ListView) v.findViewById(R.id.customlist);

    adapter1 = new AdapterCustom(getActivity(), mCustomArrayList);
    // Assign adapter to ListView
    listView.setAdapter(adapter1);

    // ListView Item Click Listener
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,     int position, long id) {
            Log.v("Tab3","click on Item");

            // ListView Clicked item index
            int itemPosition     = position;

            // ListView Clicked item value
            String  itemValue    = (String) listView.getItemAtPosition(position);

            // Show Alert
           Toast.makeText(getActivity().getApplicationContext(),
                    "Position :" + itemPosition + "  ListItem : " + itemValue, Toast.LENGTH_LONG)
                    .show();

            Intent myIntent = new Intent(getActivity(),CustomActivity.class);                
            startActivity(myIntent);
    }
    });

     return v;
    }
  }

编辑:我用 String[]

做了一个测试

如果我使用 String[] 来填充它工作的列表,我可以点击。

在 OnCreateView 上测试的代码:

    String[] values2 = new String[] { "Android List View",
            "Adapter implementation",
            "Simple List View In Android",
            "Create List View Android",
            "Android Example",
            "List View Source Code",
            "List View Array Adapter",
            "Android Example List View"
    };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, android.R.id.text1, values2);

那么当我使用我的 AdapterCustom 填充时出了什么问题?

【问题讨论】:

  • 内部onCreateView调用listView.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
  • 好的,但是当我添加它时出现此错误:codeError:(101, 44) error: cannot find symbol variable FOCUS_BLOCK_DESCENDANTS 我无法添加自动导入
  • 是的,应该是ViewGroup.FOCUS_BLOCK_DESCENDANTS - 忘了。
  • 谢谢你的回答,但我 - 效果不好,我仍然没有点击日志

标签: android json listview onitemclicklistener


【解决方案1】:
listView.setClickable(true);//in fragment

@Override
public boolean isEnabled(int position) //in adapter
{
    return true;
}

【讨论】:

    【解决方案2】:

    您可以在onItemClick 中使用开关盒 喜欢

    switch(position)
    {
    case 0:
    
    String  itemValue    = (String) listView.getItemAtPosition(position);
    
                // Show Alert
               Toast.makeText(getActivity().getApplicationContext(),
                        "Position :" + itemPosition + "  ListItem : " + itemValue, Toast.LENGTH_LONG)
                        .show();
    
                Intent myIntent = new Intent(getActivity(),CustomActivity.class);
    
                startActivity(myIntent);
    
    
    }
    

    【讨论】:

    • 就我而言,我没有 Log.v("Tab3","click on Item");在日志上,所以我认为问题不在这里。
    【解决方案3】:

    好的,我找到了,我有一个

    .setOnClickListener(new View.OnClickListener() {
    

    在我处理点击的CustomAdapter 中。

    进行这些测试帮助我找到了解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多