简体   繁体   English

无法在coustomlistview android中使用intent

[英]unable to use intent in coustomlistview android

i am using a coustomlist view to get defult data and i am not able to set the ACTION_CALL intent inside customlistview i am using fallowing code.and when ever a view is clickd i want "number" variable to store the current view's phonenumber and start ACTION_CALL intent. 我正在使用coustomlist视图获取详细数据,而我无法在customlistview中设置ACTION_CALL意图我正在使用休闲代码。每当单击视图时,我都希望使用“ number”变量来存储当前视图的电话号码并启动ACTION_CALL意图。

public class DataModel {
    private String phonenumber;
    private int anInt;
    private double aDouble;
    private String OtherData;

    public DataModel(String phonenumber, int anInt, double aDouble, String otherData) {
        this.phonenumber = phonenumber;
        this.anInt = anInt;
        this.aDouble = aDouble;
        OtherData = otherData;
    }


    public String getphonenumber() {
        return phonenumber;
    }

    public void setphonenumber(String phonenumber) {
        this.phonenumber = phonenumber;
    }

    public int getAnInt() {
        return anInt;
    }

    public void setAnInt(int anInt) {
        this.anInt = anInt;
    }

    public double getaDouble() {
        return aDouble;
    }

    public void setaDouble(double aDouble) {
        this.aDouble = aDouble;
    }

    public String getOtherData() {
        return OtherData;
    }

    public void setOtherData(String otherData) {
        OtherData = otherData;
    }
}
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;



import java.util.ArrayList;

/**
 * Created with IntelliJ IDEA.
 * User: Shahab
 * Date: 8/22/12
 * Time: 11:37 AM
 * To change this template use File | Settings | File Templates.
 */
public class CustomAdapter extends BaseAdapter {

    private static final String TAG = CustomAdapter.class.getSimpleName();
    ArrayList<DataModel> listArray;

    public CustomAdapter() {
        listArray = new ArrayList<DataModel>(5);
        listArray.add(new DataModel("7760576191", 5, 1.8, "Java"));
        listArray.add(new DataModel("7760576191", 10, 2.8, "Python"));
        listArray.add(new DataModel("7760576191", 15, 3.8, "Django"));
        listArray.add(new DataModel("7760576191", 20, 4.8, "Groovy"));
        listArray.add(new DataModel("7760576191", 25, 5.8, "Maven"));
    }

    @Override
    public int getCount() {
        return listArray.size();    // total number of elements in the list
    }

    @Override
    public Object getItem(int i) {
        return listArray.get(i);    // single item in the list
    }

    @Override
    public long getItemId(int i) {
        return i;                   // index number
    }

    @Override
    public View getView(int index, View view, final ViewGroup parent) {

        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            view = inflater.inflate(R.layout.single_list_item, parent, false);
        }

        final DataModel dataModel = listArray.get(index);

        TextView textView = (TextView) view.findViewById(R.id.tv_string_data);
        textView.setText(dataModel.getphonenumber());

        Button button = (Button) view.findViewById(R.id.btn_number_data);
        button.setText("" + dataModel.getAnInt());

        textView = (TextView) view.findViewById(R.id.tv_double_data);
        textView.setText("" + dataModel.getaDouble());

        // button click listener
        // this chunk of code will run, if user click the button
        // because, we set the click listener on the button only

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d(TAG, "string: " + dataModel.getphonenumber());
                Log.d(TAG, "int: " + dataModel.getAnInt());
                Log.d(TAG, "double: " + dataModel.getaDouble());
                Log.d(TAG, "otherData: " + dataModel.getOtherData());

                Toast.makeText(parent.getContext(), "button clicked: " + dataModel.getAnInt(), Toast.LENGTH_SHORT).show();
            }
        });


        // if you commented out the above chunk of code and
        // activate this chunk of code
        // then if user click on any view inside the list view (except button)
        // this chunk of code will execute
        // because we set the click listener on the whole view


        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d(TAG, "string: " + dataModel.getphonenumber());
                Log.d(TAG, "int: " + dataModel.getAnInt());
                Log.d(TAG, "double: " + dataModel.getaDouble());
                Log.d(TAG, "otherData: " + dataModel.getOtherData());
                String number=dataModel.getphonenumber().toString();  
                Intent callIntent = new Intent(Intent.ACTION_CALL);  
                callIntent.setData(Uri.parse("tel:"+number));  
                startActivity(callIntent); 
                Toast.makeText(parent.getContext(), "view clicked: " + dataModel.getOtherData(), Toast.LENGTH_SHORT).show();
            }
        });

        return view;
    }
}

 import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = MainActivity.class.getSimpleName(); /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.list_data); CustomAdapter customAdapter = new CustomAdapter(); listView.setAdapter(customAdapter); // we have added a button on our list view // for that reason, list view on item click wont get the event // we need to implement click listener in custom adapter // this method will work if we do not add button on our list view // listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { // @Override // public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { // // DataModel dataModel = (DataModel) adapterView.getItemAtPosition(i); // // Log.d(TAG, "string: " + dataModel.getName()); // Log.d(TAG, "int: " + dataModel.getAnInt()); // Log.d(TAG, "double: " + dataModel.getaDouble()); // Log.d(TAG, "otherData: " + dataModel.getOtherData()); // // Toast.makeText(MyActivity.this, "Item Clicked: " + i, Toast.LENGTH_SHORT).show(); // } // }); } } 

For starting an activity from baseadpater you have to do like this : 要从baseadpater启动活动,您必须执行以下操作:

 Intent callIntent = new Intent(Intent.ACTION_CALL);  
                    callIntent.setData(Uri.parse("tel:"+number));  
                            in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                            context.startActivity(callIntent );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM