【问题标题】:CustomListView OnItemClickListener not workingCustomListView OnItemClickListener 不工作
【发布时间】:2015-07-14 15:50:21
【问题描述】:

我使用本地数据库来获取记录并使用它创建自定义列表视图。自定义列表视图完美显示。问题出在 Onitemclicklistener 上。点击它不会做任何事情。我的目标是将点击项目的位置发送到另一个活动。我实现了它,但它不起作用。 列表视图的屏幕截图 - https://www.dropbox.com/s/pz83i162sxdv2b0/Untitled.png?dl=0

这是我的 MainActivity.java :

public class MainActivity extends ActionBarActivity {
ListView lv;
TextView tv1,tv2,tv3;
ArrayList<String> a=new ArrayList<String>();
String mydata,name,name1;
public String[] s1 = new String[50];
public int[] img = {R.drawable.rty, R.drawable.sf, R.drawable.rty};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv1=(TextView)findViewById(R.id.textView);
    lv = (ListView) findViewById(R.id.listView);
    new MyData().execute();

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Intent in = new Intent(MainActivity.this, listclick.class);
            in.putExtra("position", position);
            startActivity(in);
        }
    });
}
public void abc(View v)
{
    Intent in=new Intent(MainActivity.this,webform.class);
    startActivity(in);

}
public class MyData extends AsyncTask<String,String,String>
{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        CustomAdapter cad = new CustomAdapter(MainActivity.this, s1, img);
        lv.setAdapter(cad);
    }

    @Override
    protected String doInBackground(String... params) {
        getData();
        return null;
    }
}

public void getData()
{
    try {
        HttpClient httpClient=new DefaultHttpClient();

        HttpPost httpPost=new HttpPost("http://10.0.2.2/abcd.php");
        HttpResponse response=httpClient.execute(httpPost);
        HttpEntity httpEntity=response.getEntity();
        InputStream is=httpEntity.getContent();
        BufferedReader reader=new BufferedReader(new InputStreamReader(is,"utf-8"),8);
        StringBuilder strbuilder=new StringBuilder();
        String line=null;
        while ((line=reader.readLine())!=null)
        {
            strbuilder.append(line);
        }
        is.close();
        mydata=strbuilder.toString();
        JSONArray obj=new JSONArray(mydata);
        for(int i=0;i<obj.length();i++)
        {

            JSONObject obj1=obj.getJSONObject(i);
            a.add(i,obj1.getString("Name"));
        }
        String[] s = new String[a.size()];
        s=a.toArray(s);
        s1 = s;
    }
    catch (Exception e)
    {

    }


}


}

这是第二个活动 listclick.java

public class listclick extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listclick);
    Intent in=getIntent();
    String s1=in.getStringExtra("position");
   }
}

这里是 Customlist.xml(布局文件)

 <?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF9200"
android:clickable="true">
<TableRow>
    <ImageView
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:background="@drawable/sf"

        android:id="@+id/imageview"
        />
    <TextView
        android:layout_height="70dp"
        android:layout_width="fill_parent"
        android:textSize="20dp"
        android:fitsSystemWindows="true"
        android:textStyle="bold"

        android:layout_gravity="center"
        android:gravity="center"
        android:paddingLeft="20dp"
        android:text="Codewars 3.0"
        android:id="@+id/textView"
        />
</TableRow>
</TableLayout>

这里是 CustomAdapter.java

public class CustomAdapter extends ArrayAdapter<String>{

Context c1;
String s1[];
int s2[];
CustomAdapter(Context c,String s[],int s3[])
{
    super(c,R.layout.listcustom,s);
    this.c1=c;
    this.s1=s;
    this.s2=s3;
}


@Override
public View getView(int position, View v, ViewGroup parent) {
    LayoutInflater li=(LayoutInflater) c1.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v=li.inflate(R.layout.listcustom,null);
    TextView tv=(TextView)v.findViewById(R.id.textView);
    tv.setText(s1[position]);






    return v;
}

}

【问题讨论】:

  • 该项目是否包含自定义视图?您没有显示 CustomAdapter 的代码
  • 我在customlist的每个图像和文本视图中都尝试了android:focusable="false" android:focusableInTouchMode="false" ..但它仍然不起作用
  • 看看 CustomAdapter.java

标签: android listview android-listview android-custom-view onitemclicklistener


【解决方案1】:

我认为你的代码有两个问题,第一个是你的listcustom.xml有这个设置:

android:clickable="true"

如果您要使用列表视图的 onItemClickListener(),则不需要该部分。仅当您要专门设置 View.OnCLickListner for ever 项目时才设置可点击。所以只需删除 XML 中的那一行。

可能导致问题的下一行如下:

inflate(R.layout.listcustom,null)

你应该像这样膨胀列表中的项目:

inflate(R.layout.listcustom, parent, false);

【讨论】:

  • 感谢伙伴,它成功了。我的项目真的需要这个答案。
【解决方案2】:

您可能正在开始活动,但您的旧活动挡住了视线。试试这个:

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        Intent in = new Intent(MainActivity.this, listclick.class);
        in.putExtra("position", position);
        startActivity(in);
        finish();
    }
});

【讨论】:

  • 不,那没用。问题是即使我在 onclick 中放了一个 toast,它也不会显示。
【解决方案3】:

我建议你在适配器的getView方法中做这项工作,触摸事件可能在listview中发生冲突。

class MyAdapter extends BaseAdapter implements View.OnClickListener {

    ....

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        ....
        view.setOnClickListener(this);
        view.setTag(position);
        return view;
    }

    @Override
    public void onClick(View v) {
        int position = (Integer) v.getTag();
        ....
    }
}

【讨论】:

  • 我在 getView 中使用了意图,但 startActivity 方法在那里不起作用。 public void onClick(View v) { int position = (Integer) v.getTag(); Intent in=new Intent(getContext(),listclick.class); }
  • 从Activity中获取上下文,并调用context.startActivity @NikhilKhurana
  • 不工作是什么意思? onClick 没有被调用?
  • 我尝试了敬酒以及重定向到其他活动。但是 OnClick 没有被调用。既不显示 toast,也不打开其他活动。
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
相关资源
最近更新 更多