Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android StartActivityForResult更新ListView中的行_Android_Listview_Startactivityforresult - Fatal编程技术网

Android StartActivityForResult更新ListView中的行

Android StartActivityForResult更新ListView中的行,android,listview,startactivityforresult,Android,Listview,Startactivityforresult,我有一个使用ListView显示主题列表的活动。每行都有一个文本视图,设置为红色表示该主题的问题尚未回答。当用户单击一行时,它应该启动一个活动,询问关于该主题的问题 我想通过调用startActivityForResult来启动活动,这将使用问题被询问的事实更新行,并将文本视图变为绿色 我的问题是如何从onActivityResult更新listview中的特定行 public class QuestionListForInTransaction extends ActionBarActivit

我有一个使用ListView显示主题列表的活动。每行都有一个文本视图,设置为红色表示该主题的问题尚未回答。当用户单击一行时,它应该启动一个活动,询问关于该主题的问题

我想通过调用startActivityForResult来启动活动,这将使用问题被询问的事实更新行,并将文本视图变为绿色

我的问题是如何从onActivityResult更新listview中的特定行

public class QuestionListForInTransaction extends ActionBarActivity {

    ListView listView;


      public void onCreate(Bundle icicle) {
            super.onCreate(icicle);

            setContentView(R.layout.questionlistforintxlayout);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setIcon(R.drawable.ic_launcher);
            setTitle("Call Question(s)");

            listView = (ListView)findViewById(R.id.txinquestionlist);

            String[] values = new String[] { "Are you the driver?", "Question 2", "Question 3", };


            MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(this, values);
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(listener);




          }//end of onCreate




          public class MySimpleArrayAdapter extends ArrayAdapter<String> {
              private final Context context;
              private final String[] values;

              public MySimpleArrayAdapter(Context context, String[] values) {
                super(context, R.layout.questionlisttxinrowlayout, values);
                this.context = context;
                this.values = values;
              }

              @Override
              public View getView(int position, View convertView, ViewGroup parent) {

                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View rowView = inflater.inflate(R.layout.questionlisttxinrowlayout, parent, false);

                TextView question = (TextView) rowView.findViewById(R.id.tvquestionforintx);
                question.setText(values[position]);

                TextView answered = (TextView) rowView.findViewById(R.id.rowstatusbox);
                answered.setBackgroundColor(Color.RED);

                String questionStr = values[position];
                rowView.setTag(questionStr);


                return rowView;

              }




            } //end of adapter class



          OnItemClickListener listener = new OnItemClickListener() {

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

                //Toast.makeText(QuestionListForInTransaction.this, "pos = " + position, Toast.LENGTH_LONG).show();

                String question = (String)view.getTag();

                if(question.equalsIgnoreCase("Are you the driver?")){

                     //Toast.makeText(QuestionListForInTransaction.this, "Are you the driver?" + position, Toast.LENGTH_LONG).show();

                    final int QUESTION_REQUEST = 1;
                    Intent questionIntent = new Intent(QuestionListForInTransaction.this, Question.class);
                    startActivityForResult(questionIntent, QUESTION_REQUEST);

                     //TextView answered = (TextView) view.findViewById(R.id.rowstatusbox);
                     //answered.setBackgroundColor(Color.GREEN);

                }


            }
        };


        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent intent){
            super.onActivityResult(requestCode, resultCode, intent);
            Bundle extras = intent.getExtras();
            if(extras != null)
            int result = extras.getInt("result");

            //*********************update a row green**********************
        }

    } //end of class
Intransaction的公共类问题列表扩展了ActionBarActivity{
列表视图列表视图;
创建公共空间(捆绑冰柱){
超级冰柱;
setContentView(R.layout.questionlistforintxlayout);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_启动器);
片名(“通话问题”);
listView=(listView)findViewById(R.id.txinquestionlist);
字符串[]值=新字符串[]{“你是司机吗?”,“问题2”,“问题3”,};
mysimplarrayadapter adapter=新的mysimplarrayadapter(这个值);
setAdapter(适配器);
setOnItemClickListener(listener);
}//onCreate结束
公共类MySimpleArrayAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终字符串[]值;
公共MySimpleArrayAdapter(上下文上下文,字符串[]值){
super(上下文,R.layout.QuestionListXinRowLayout,值);
this.context=上下文;
这个值=值;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图行视图=充气机。充气(R.layout.questionlistxinRowLayout,父级,false);
TextView问题=(TextView)rowView.findViewById(R.id.tvquestionforintx);
问题.setText(值[位置]);
TextView answered=(TextView)rowView.findViewById(R.id.rowstatusbox);
回答:挫折背景色(颜色:红色);
字符串questionStr=值[位置];
rowView.setTag(questionStr);
返回行视图;
}
}//适配器类的结尾
OnItemClickListener=新建OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//Toast.makeText(QuestionListForInTransaction.this,“pos=“+位置,Toast.LENGTH_LONG).show();
String question=(String)view.getTag();
如果(问题.equalsIgnoreCase(“你是司机吗?”)){
//Toast.makeText(QuestionListForInTransaction.this,“你是司机吗?”+位置,Toast.LENGTH\u LONG.show();
最后一个整型问题要求=1;
意向questionIntent=新意向(QuestionListForInTransaction.this,Question.class);
startActivityForResult(问题意图、问题请求);
//TextView answered=(TextView)view.findViewById(R.id.rowstatusbox);
//回答:挫折背景色(颜色:绿色);
}
}
};
@凌驾
ActivityResult上受保护的void(int-requestCode、int-resultCode、Intent-Intent){
super.onActivityResult(请求代码、结果代码、意图);
Bundle extras=intent.getExtras();
如果(附加值!=null)
int result=extras.getInt(“结果”);
//*********************将行更新为绿色**********************
}
}//下课

只需创建一些自定义包装类,如下所示:

public class QuestionWrapper {
private String mQuestionText;
private boolean mIsAsked;

public QuestionWrapper(String defaultQuestionText, boolean isAsked) {
    mQuestionText = defaultQuestionText;
    mIsAsked = isAsked;
}

public boolean isAsked() {
    return mIsAsked;
}

public void setIsAswked(boolean isAsked) {
    mIsAsked = isAsked;
}

public String getQuestionText() {
    return mQuestionText;
}
    public class MySimpleArrayAdapter extends ArrayAdapter<QuestionWrapper> {
    private final Context context;
    private final List<QuestionWrapper> mWrappers;

    public MySimpleArrayAdapter(Context context, List<QuestionWrapper> wrappers) {
        super(context, R.layout.questionlisttxinrowlayout, wrappers);
        this.context = context;
        this.mWrappers = wrappers;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.questionlisttxinrowlayout, parent, false);
        QuestionWrapper wrapper = mWrappers.get(position);
        TextView question = (TextView) rowView.findViewById(R.id.tvquestionforintx);
        question.setText(wrapper.getQuestionText());

        TextView answered = (TextView) rowView.findViewById(R.id.rowstatusbox);
        if (wrapper.isAsked()) {
            answered.setBackgroundColor(Color.GREEN);
        } else {
            answered.setBackgroundColor(Color.RED);
        }

        rowView.setTag(wrapper.getQuestionText());

        return rowView;

    }
}

然后,您需要将此包装器列表设置为适配器:

public class QuestionListForInTransaction extends ActionBarActivity {
    List<QuestionWrapper>  mWrappers = new ArrayList<>();
    MySimpleArrayAdapter mAdapter;
并按如下方式更新适配器:

public class QuestionWrapper {
private String mQuestionText;
private boolean mIsAsked;

public QuestionWrapper(String defaultQuestionText, boolean isAsked) {
    mQuestionText = defaultQuestionText;
    mIsAsked = isAsked;
}

public boolean isAsked() {
    return mIsAsked;
}

public void setIsAswked(boolean isAsked) {
    mIsAsked = isAsked;
}

public String getQuestionText() {
    return mQuestionText;
}
    public class MySimpleArrayAdapter extends ArrayAdapter<QuestionWrapper> {
    private final Context context;
    private final List<QuestionWrapper> mWrappers;

    public MySimpleArrayAdapter(Context context, List<QuestionWrapper> wrappers) {
        super(context, R.layout.questionlisttxinrowlayout, wrappers);
        this.context = context;
        this.mWrappers = wrappers;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.questionlisttxinrowlayout, parent, false);
        QuestionWrapper wrapper = mWrappers.get(position);
        TextView question = (TextView) rowView.findViewById(R.id.tvquestionforintx);
        question.setText(wrapper.getQuestionText());

        TextView answered = (TextView) rowView.findViewById(R.id.rowstatusbox);
        if (wrapper.isAsked()) {
            answered.setBackgroundColor(Color.GREEN);
        } else {
            answered.setBackgroundColor(Color.RED);
        }

        rowView.setTag(wrapper.getQuestionText());

        return rowView;

    }

我认为对于startActivityForResult中的RequestCode,您可以使用Adapter click position。

只需创建一些自定义包装类,如下所示:

public class QuestionWrapper {
private String mQuestionText;
private boolean mIsAsked;

public QuestionWrapper(String defaultQuestionText, boolean isAsked) {
    mQuestionText = defaultQuestionText;
    mIsAsked = isAsked;
}

public boolean isAsked() {
    return mIsAsked;
}

public void setIsAswked(boolean isAsked) {
    mIsAsked = isAsked;
}

public String getQuestionText() {
    return mQuestionText;
}
    public class MySimpleArrayAdapter extends ArrayAdapter<QuestionWrapper> {
    private final Context context;
    private final List<QuestionWrapper> mWrappers;

    public MySimpleArrayAdapter(Context context, List<QuestionWrapper> wrappers) {
        super(context, R.layout.questionlisttxinrowlayout, wrappers);
        this.context = context;
        this.mWrappers = wrappers;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.questionlisttxinrowlayout, parent, false);
        QuestionWrapper wrapper = mWrappers.get(position);
        TextView question = (TextView) rowView.findViewById(R.id.tvquestionforintx);
        question.setText(wrapper.getQuestionText());

        TextView answered = (TextView) rowView.findViewById(R.id.rowstatusbox);
        if (wrapper.isAsked()) {
            answered.setBackgroundColor(Color.GREEN);
        } else {
            answered.setBackgroundColor(Color.RED);
        }

        rowView.setTag(wrapper.getQuestionText());

        return rowView;

    }
}

然后,您需要将此包装器列表设置为适配器:

public class QuestionListForInTransaction extends ActionBarActivity {
    List<QuestionWrapper>  mWrappers = new ArrayList<>();
    MySimpleArrayAdapter mAdapter;
并按如下方式更新适配器:

public class QuestionWrapper {
private String mQuestionText;
private boolean mIsAsked;

public QuestionWrapper(String defaultQuestionText, boolean isAsked) {
    mQuestionText = defaultQuestionText;
    mIsAsked = isAsked;
}

public boolean isAsked() {
    return mIsAsked;
}

public void setIsAswked(boolean isAsked) {
    mIsAsked = isAsked;
}

public String getQuestionText() {
    return mQuestionText;
}
    public class MySimpleArrayAdapter extends ArrayAdapter<QuestionWrapper> {
    private final Context context;
    private final List<QuestionWrapper> mWrappers;

    public MySimpleArrayAdapter(Context context, List<QuestionWrapper> wrappers) {
        super(context, R.layout.questionlisttxinrowlayout, wrappers);
        this.context = context;
        this.mWrappers = wrappers;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.questionlisttxinrowlayout, parent, false);
        QuestionWrapper wrapper = mWrappers.get(position);
        TextView question = (TextView) rowView.findViewById(R.id.tvquestionforintx);
        question.setText(wrapper.getQuestionText());

        TextView answered = (TextView) rowView.findViewById(R.id.rowstatusbox);
        if (wrapper.isAsked()) {
            answered.setBackgroundColor(Color.GREEN);
        } else {
            answered.setBackgroundColor(Color.RED);
        }

        rowView.setTag(wrapper.getQuestionText());

        return rowView;

    }

我认为对于startActivityForResult中的RequestCode,您可以使用适配器单击位置。

您可以创建自定义类,使用两个值String和boolean,并在得到结果时将boolean设置为false。然后通知适配器。您可以创建自定义类,有两个值String和boolean,并在得到结果时将boolean设置为false。然后通知适配器。嘿,谢谢你花时间这么做,谢谢!但是,我得到了一个错误,“显式调用构造函数时无法引用实例字段mWrappers”。这是针对适配器构造函数的超级部分中的mWrappers变量。我刚刚在outter类中重命名了mWapper。非常感谢你的帮助:)嘿,谢谢你花时间做这件事,谢谢!但是,我得到了一个错误,“显式调用构造函数时无法引用实例字段mWrappers”。这是针对适配器构造函数的超级部分中的mWrappers变量。我刚刚在outter类中重命名了mWapper。非常感谢您的帮助:)