2016-05-24 4 views
0

私は友人とアプリケーションをやっています。私はalredyが複数行のLisViewを管理し、それに対してカスタムアダプタを実行しています。このアプリケーションが行うことは、他のアクティビティから車を登録することです。送信ボタンをクリックすると、車から3つのアイテムをTabbedアクティビティにあるListViewに追加します。インテントとバンドルで情報を取得して入れてみましたが、それはヌルエラーです。複数の項目にアイテムを追加する他のアクティビティからdinamicallyリストビュー

これは私のプロジェクトそれまでは今です:

MainActivity:

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 

public class MainActivity extends AppCompatActivity { 



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

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this, CarType.class); 
      MainActivity.this.startActivity(intent); 


     } 
    }); 

    // Get the ViewPager and set it's PagerAdapter so that it can display items 
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    viewPager.setAdapter(new SampleFragmentPageAdapter(getSupportFragmentManager(), 
      MainActivity.this)); 

    // Give the TabLayout the ViewPager 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs); 
    tabLayout.setupWithViewPager(viewPager); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      Fragment fragment = null; 
      if(tab.getPosition()==0) { 

       PageFragment pageFragment = new PageFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.container, pageFragment).commit(); 
      } 
      if(tab.getPosition()==1){ 
       SecondPageFragment secondPageFragment = new SecondPageFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.container,secondPageFragment).commit(); 

      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
} 

} 

ページフラグメント:

import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 

public class PageFragment extends ListFragment { 

String[] cars ; 
String[] modelo ; 
String[] placas ; 


public static final String ARG_PAGE = "ARG_PAGE"; 

private int mPage; 

public static PageFragment newInstance(int page) { 
    Bundle args = new Bundle(); 
    args.putInt(ARG_PAGE, page); 
    PageFragment fragment = new PageFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 


public PageFragment() { 


} 

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


} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Bundle intent = getActivity().getIntent().getExtras(); 



     cars = new String[]{intent.getString("marca")}; 
     modelo = new String[]{intent.getString("modelo")}; 
     placas = new String[]{intent.getString("placas")}; 



    View view = inflater.inflate(R.layout.activity_page_fragment, container, false); 
    Adapter adapter = new Adapter(getActivity(), cars, modelo, placas); 
    ListView listView = (ListView) view.findViewById(android.R.id.list); 
    listView.setAdapter(adapter); 

    return view; 
} 
} 

アダプタ:

CarType
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 


public class Adapter extends ArrayAdapter<String> { 

String [] cars ; 
String [] modelo ; 
String [] placas ; 
Context c; 
LayoutInflater inflater; 


public Adapter(Context context, String[] cars, String[] modelo, String[] placas){ 
    super(context, R.layout.single_row, cars); 

    this.c=context; 
    this.cars=cars; 
    this.modelo=modelo; 
    this.placas=placas; 



} 

public class ViewHolder{ 
    TextView cars; 
    TextView model; 
    TextView placas; 


} 

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

    if(convertView == null){ 

     inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView=inflater.inflate(R.layout.single_row,null); 

    } 

    final ViewHolder holder = new ViewHolder(); 
    holder.cars=(TextView)convertView.findViewById(R.id.textView2); 
    holder.model=(TextView)convertView.findViewById(R.id.textView3); 
    holder.placas=(TextView)convertView.findViewById(R.id.textView4); 

    holder.cars.setText(cars[position]); 

    holder.model.setText(modelo[position]); 
    holder.placas.setText(placas[position]); 

    return convertView; 
} 
} 

これは私が唯一のListViewコントロールとIが含まれて私は私のページフラグメントのXMLファイルを持っている。この後、リストビュー

import android.app.AlertDialog; 
import android.content.Intent; 
import android.graphics.drawable.Drawable; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.*; 

import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.File; 

public class CarType extends AppCompatActivity { 

ImageButton androidImageButton; 
ImageView imageView; 
static final int CAM_REQUEST = 1; 



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

    final EditText etMarca = (EditText)findViewById(R.id.etMarca); 
    final EditText etModelo = (EditText)findViewById(R.id.etModelo); 
    final EditText etPlacas = (EditText)findViewById(R.id.etPlacas); 
    final EditText etColor = (EditText)findViewById(R.id.etColor); 
    final CheckBox cbCamioneta = (CheckBox)findViewById(R.id.cbCamioneta); 
    final CheckBox cbCar = (CheckBox)findViewById(R.id.cbCar); 
    final boolean checkStatus = cbCamioneta.isChecked(); 



    Button bSubmit = (Button)findViewById(R.id.bSubmit); 


    assert bSubmit != null; 
    bSubmit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(getApplicationContext(), Adapter.class); 
      intent.putExtra("marca", etMarca.getText().toString()); 
      intent.putExtra("modelo", etModelo.getText().toString()); 
      intent.putExtra("placas", etPlacas.getText().toString()); 
      intent.putExtra("color", etColor.getText().toString()); 
      intent.putExtra("camioneta", cbCamioneta.getText().toString()); 
      intent.putExtra("car", cbCar.getText().toString()); 
      intent.putExtra("checkboxstatus", checkStatus); 

      startActivity(intent); 


      final String modelo = etModelo.getText().toString(); 
      final String marca = etMarca.getText().toString(); 
      final String placas = etPlacas.getText().toString(); 
      final String color = etColor.getText().toString(); 

      Response.Listener<String> responseListener = new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONObject jsonResponse = new JSONObject(response); 
         boolean success = jsonResponse.getBoolean("success"); 
         if (success) { 
          Intent intent = new Intent(CarType.this, MainActivity.class); 
          CarType.this.startActivity(intent); 
         } else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(CarType.this); 
          builder.setMessage("Register Failed") 
            .setNegativeButton("Retry", null) 
            .create() 
            .show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }; 

      CarRegisterRequest carregisterRequest = new CarRegisterRequest(marca, modelo, placas, color, responseListener); 
      RequestQueue queue = Volley.newRequestQueue(CarType.this); 
      queue.add(carregisterRequest); 

     } 
    }); 

    androidImageButton = (ImageButton) findViewById(R.id.image_button_android); 
    imageView = (ImageView) findViewById(R.id.Final_picture); 
    androidImageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      File file = getFile(); 
      camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
      startActivityForResult(camera_intent, CAM_REQUEST); 
     } 
    }); 
} 



private File getFile(){ 
    File folder = new File ("sdcard/camera_app"); 

    if (!folder.exists()){ 
     folder.mkdir(); 
    } 
    File image_file = new File(folder, "cam_image.jpg"); 
    return image_file; 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    String path = "sdcard/camera_app/cam_image.jpg"; 
    imageView.setImageDrawable(Drawable.createFromPath(path)); 
} 

} 

に情報を取得したいの一形態でありますマルチラインListViewの形式である "single_row.xml"があります。

ヘルプは非常に高く評価されています。私はAndroidとこのサイトにはかなり新しいので、直接回答を得られない場合はお詫びします。

ありがとうございました。

+0

は、エラー・ログにもあなたは、バンドルを経由してparcelableにオブジェクト自体を渡すことができ、関連する行番号 – Alok

+0

でコードを更新提供することを実行する必要があります、またはデータベースに保存することができます。新しいアクティビティでは、dbからすべてを読み込みます.SugarORMは実装が簡単なDBです。フラグメントを交換し、2つの異なるアクティビティのように見せることができる同じアクティビティの中で、フラグメントを使用してマスターディテールパターン(デフォルトでアンドロイドスタジオがあります)を使用することもできます –

答えて

0

それはあなたの結果のために活動を開始したら、あなたは同じ活動(MainActivity)で結果を待つ必要があるでしょうし、あなたが得るMainActivityからあなたがstartActivityForResult(intent, requestCode)に必要なアクティビティアンドロイド

で通信する方法は非常に簡単ですonActivityResult(int requestCode, int resultCode, Intent data)の結果とそのインテントのすべてのデータが表示されます。

public class MainActivity extends AppCompatActivity { 

    private static final int RQ_CAR = 1; 
    .... 


     .... 
     // Open the second activity 
     Intent intent = new Intent(MainActivity.this, CarType.class); 
     startActivityForResult(intent, RQ_CAR); 
     .... 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == RQ_CAR && resultCode == Activity.RESULT_OK) { 
      Bundle bundle = data.getExtras(); 
      // Extract data and do whatever you want 
     } 
    } 

} 

が、私は意思にバンドルを割り当て、resultCodeががOKであることをことを設定することができますか?

2番目のアクティビティ(CarType)では、手動で

Intent intent = new Intent(); 
Bundle extras = new Bundle(); 
extras.put....(); // put all your data here 
intent.putExtras(extras); 
setResult(Activity.RESULT_OK, intent); 
+0

悪いことに、試してみてください! –

+0

フラグメントのコードの最初の部分ではありませんか?またはMainActivityは問題ありませんか? –

+0

それは異なります。誰が結果を出し始めるでしょうか? –

関連する問題